我正在尝试链接到POCO C ++库的静态版本,如下所示:
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::Logger::get(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
即使Poco::Logger::get(std::string const&)
实际上已在libPocoFoundation.a
中定义。
现在,如果我尝试链接到基础库的共享版本,它可以工作:
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
lib的静态和共享版本具有相同的符号,因此我发现很难弄清楚我做错了什么。
的Ubuntu / Linaro的。 g ++ 4.6.3
答案 0 :(得分:15)
我的经验是,在静态链接时,链接Poco库的顺序非常重要。 似乎重要的基础是最后一个。
对我有用的顺序是:
答案 1 :(得分:1)
我设法通过分离编译和链接来解决这个问题。这就是我的样子:
<强>编译:强>
g++ -c -std=c++0x -ggdb -I/home/bbogart/src/of_v0071_linux64_release/libs/poco/include
pkg-config opencv --cflags *.cpp
链接:强>
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
请注意,您从lib名称中省略了“lib”和“.a”。