From: Rom <a_r...@ho...> - 2009-06-19 04:48:36
|
Hi folks, I'm having trouble linking with (ld) when invoked directly. However, when invoked indirectly (via the compiler driver), everything works fine. I've included a tiny sample program, the makefile and the build output. Beside the obvious things, "setting the lib path with -L", what else am I missing here.. ? Your response is greatly appreciated. My Environment : Windows XP SP3 gcc/g++-3.4.5 GNU ld (GNU Binutils 2.19.1) PMAKE (mks Toolkit make ) Many thanks.. --Rom a_r...@ho... Tiny sample program. // // g++ -Wno-deprecated main.cpp #include <iostream.h> #include <strstream> #include <iomanip.h> #include <stddef.h> int main(int argc, char *argv[]) { char buf[4096]="The quick brown fox.."; std::strstream ss(buf,4096,ios::out); cout << ss.str() << endl; ss.clear(); return(0); } #---------------------- # makefile for G++ build. (WORKING WITH PMAKE) from MKS-Toolkit. #---------------------- APP=out CC=g++ CPPFLAGS= -D_MSWINDOWSPC -c -g -Wno-deprecated LIBDIR=c:\mingw\lib LDFLAGS=-L$(LIBDIR) -lstdc++ LINKER=ld O = .o HDR= SRC= main.cpp OBJECTS= main.o $(APP): $(OBJECTS) $(LINKER) $(LDFLAGS) $(OBJECTS) -o $(APP) %$O : %.cpp $(CC) $(CPPFLAGS) $? clean: FRC rm $(APP).exe rm *.o FRC: # #--- END Sample Makefile # Here is the sample output of the build. First with the variable LINKER=ld as per the listing of the makefile above. $ make -f sample.mak g++ -D_MSWINDOWSPC -c -g -Wno-deprecated main.cpp ld -Lc:\mingw\lib -lstdc++ main.o -o out main.o: In function `ZSt17__verify_groupingPKcjRKSs': C:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../ include/c++/3.4.5/bits/locale_facets.tcc:2498: undefined reference to `std::string::size() const' C:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../ include/c++/3.4.5/bits/locale_facets.tcc:2507: undefined reference to `std::string::operator[](unsigned int) const' C:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../ include/c++/3.4.5/iostream:77: undefined reference to `std::ios_base::Init::~Init()' . . . . (The link errors continue on... ) . make: Error code 1 Now, the output of the build with the variable LINKER=g++ instead. $ make -f sample.mak g++ -D_MSWINDOWSPC -c -g -Wno-deprecated main.cpp g++ -Lc:\mingw\lib -lstdc++ main.o -o out $ ls out.exe out.exe $ out.exe The quick brown fox.. $ |