簡體   English   中英

poco c ++靜態鏈接問題與未定義的符號引用

[英]poco c++ static linking problems with undefined references to symbols

我正在嘗試鏈接到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

我的經驗是,在靜態鏈接時,鏈接Poco庫的順序很重要。 似乎重要的基礎是最后一個。

對我有用的訂單是:

  1. UTIL
  2. XML
  3. 基礎

我設法通過分離編譯和鏈接來解決這個問題。 這是我的樣子:

編譯: 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”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM