Reputation: 359
I'm trying to link to static versions of the POCO C++ libs like this:
g++ BCCMain.o -L$_POCO_LIBS -Wl,-Bstatic $_POCO_LIBS/libPocoFoundation.a $_POCO_LIBS/libPocoUtil.a $_POCO_LIBS/libPocoXML.a $_POCO_LIBS/libPocoJSON.a -Wl,-Bdynamic -o BCMain
Unfortunatelly this gives errors about some undefined references to symbols like:
Poco::Logger::get(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
even though Poco::Logger::get(std::string const&)
actually IS defined in libPocoFoundation.a
.
Now if I try to link to a shared version of the foundation lib it works:
g++ BCCMain.o -L$_POCO_LIBS -Wl,-Bstatic $_POCO_LIBS/libPocoFoundation.a $_POCO_LIBS/libPocoUtil.a $_POCO_LIBS/libPocoXML.a $_POCO_LIBS/libPocoJSON.a -Wl,-Bdynamic -lPocoFoundation -o BCMain
Static and shared versions of the libs have the same symbols so I find it hard to figure what I'm doing wrong.
Ubuntu/Linaro. g++ 4.6.3
Upvotes: 6
Views: 7857
Reputation: 181
My experience is that the order of linking the Poco libraries is important when statically linked. Seems important Foundation to be the last one.
The order that works for me is:
Upvotes: 18
Reputation: 279
I managed to solve this by separating compiling and linking. Here is what mine looks like:
Compile:
g++ -c -std=c++0x -ggdb -I/home/bbogart/src/of_v0071_linux64_release/libs/poco/include
pkg-config opencv --cflags*.cpp
link:
g++ *.o -L/home/bbogart/src/of_v0071_linux64_release/libs/poco/lib/linux64/ -lPocoNet -lPocoUtil -lPocoFoundation -lopencv_gpu
pkg-config opencv --libs-o cameraGrabber
Note that you omit the "lib" and ".a" from lib names.
Upvotes: 1