poco c++;未定义符号引用的静态链接问题 我试图链接到POCO C++ LIBS的静态版本: 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

poco c++;未定义符号引用的静态链接问题 我试图链接到POCO C++ LIBS的静态版本: 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,c++,static-linking,poco-libraries,C++,Static Linking,Poco Libraries,不幸的是,这会导致一些未定义的符号引用出现错误,如: Poco::Logger::get(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) libs的静态版本和共享版本具有相同的符号,因此我很难找出我做错了什么 Ubuntu/Linaro。g++4.6.3我通过分离编译和链接来解决这个问题。下面是我的照片: 编译: g++-c-std=c++0

不幸的是,这会导致一些未定义的符号引用出现错误,如:

Poco::Logger::get(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
libs的静态版本和共享版本具有相同的符号,因此我很难找出我做错了什么


Ubuntu/Linaro。g++4.6.3

我通过分离编译和链接来解决这个问题。下面是我的照片:

编译:
g++-c-std=c++0x-ggdb-I/home/bbogart/src/of\u v0071\u linux64\u release/libs/poco/include
pkg config opencv--cflags
*.cpp

链接:
g++*.o-L/home/bbogart/src/of_v0071\u linux64\u release/libs/poco/lib/linux64/-lPocoNet-lpocutil-lPocoFoundation-lopencv\u gpu
pkg config opencv-libs
-o cameraGrabber


请注意,在库名称中省略了“lib”和“.a”。

我的经验是,静态链接Poco库时,链接顺序很重要。 似乎是最后一个重要的基础。

对我有效的顺序是:

  • 利用率
  • XML
  • 基础

  • 在编译时,我还定义了POCO_STATIC。没帮上忙。啊!谢谢,就是这样!是的,与gcc的静态链接顺序很重要,必须考虑这些LIB之间的内部依赖关系。这不仅仅是POCO问题,而是gcc静态链接中的一般行为。在这种情况下,Util依赖XML(例如,您可以在代码中检查它),并且所有的LIBS都依赖于基础。独立的lib排在第一位,这些lib的需求应该排在它们之后,还有PocoJSON,它应该位于Util和Net库之间。
    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