poco c++ static linking problems with undefined references to symbols

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-01 10:56:09

问题


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


回答1:


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:

  1. Util
  2. Net
  3. XML
  4. Foundation



回答2:


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/includepkg-config opencv --cflags*.cpp

link: g++ *.o -L/home/bbogart/src/of_v0071_linux64_release/libs/poco/lib/linux64/ -lPocoNet -lPocoUtil -lPocoFoundation -lopencv_gpupkg-config opencv --libs-o cameraGrabber

Note that you omit the "lib" and ".a" from lib names.



来源:https://stackoverflow.com/questions/15701796/poco-c-static-linking-problems-with-undefined-references-to-symbols

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!