簡體   English   中英

在Cygwin上鏈接Boost庫

[英]Linking Boost library on Cygwin

我已經在這里待了幾個小時,所以我來這里尋求幫助。 可以肯定的是,我幾乎已經弄清楚了,但是我仍然boost::system::generic_categoryboost::system::generic_categoryboost::system::system_category的未定義引用的鏈接器錯誤。

我只有一個文件,我試圖鏈接以使其成為可執行文件。

我首先將其編譯為目標文件:

g++ -c main.cpp -IC:/boost/boost_1_61_0

這樣成功創建了main.o。

我的下一個也是最后一個目標是將其鏈接到可執行文件。 我嘗試了與其他文章不同的方法:

g++ main.o -LC:/boost/boost_1_61_0/stage/lib

g++ main.o -LC:/boost/boost_1_61_0/stage/lib/libboost_system.a

g++ main.o -lboost_system

結果要么告訴我找不到該庫,要么類似:

main.o:main.cpp:(.text+0x89): undefined reference to `boost::system::generic_category()'
main.o:main.cpp:(.text+0x89): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `boost::system::generic_category()'
main.o:main.cpp:(.text+0x95): undefined reference to `boost::system::generic_category()'
main.o:main.cpp:(.text+0x95): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `boost::system::generic_category()'
main.o:main.cpp:(.text+0xa1): undefined reference to `boost::system::system_category()'
main.o:main.cpp:(.text+0xa1): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `boost::system::system_category()'
main.o:main.cpp:(.text$_ZN5boost11this_thread9sleep_forERKNS_6chrono8durationIlNS_5ratioILl1ELl1000000000EEEEE[_ZN5boost11this_thread9sleep_forERKNS_6chrono8durationIlNS_5ratioILl1ELl1000000000EEEEE]+0x24): undefined reference to `boost::this_thread::hiden::sleep_for(timespec const&)'
main.o:main.cpp:(.text$_ZN5boost11this_thread9sleep_forERKNS_6chrono8durationIlNS_5ratioILl1ELl1000000000EEEEE[_ZN5boost11this_thread9sleep_forERKNS_6chrono8durationIlNS_5ratioILl1ELl1000000000EEEEE]+0x24): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `boost::this_thread::hiden::sleep_for(timespec const&)'
collect2: error: ld returned 1 exit status

我知道我正確構建了Boost庫,因為在stage / lib目錄中還有一個libboost_system.a文件以及許多其他庫。 有什么想法嗎?

讓我們先看一下您嘗試過的命令。

g++ main.o -L C:/boost/boost_1_61_0/stage/lib

這告訴g++C:/boost/boost_1_61_0/stage/lib目錄中查找庫。 它沒有說要引入哪些庫,但是一旦完成, g++就會出現。

由於您的代碼引用了在boost_system發現的東西(例如boost::system::generic_category ),並且由於您沒有告訴鏈接器提取該庫,因此這些引用最終是未定義的。

g++ main.o -L C:/boost/boost_1_61_0/stage/lib/libboost_system.a

這告訴g++C:/boost/boost_1_61_0/stage/lib/libboost_system.a目錄中查找庫。 由於(大概)不是目錄,因此-L標志沒有實際作用。

g++ main.o -lboost_system

這告訴g++鏈接到boost_system庫。 雖然鏈接器知道如何將庫名(例如boost_system )轉換為相應的文件名(例如libboost_system.a ),但是沒有指示可以在哪里找到該文件。 因此,鏈接器將查找它知道的默認目錄。 如果在該文件中找不到該文件,則g++抱怨找不到該庫。


在這一點上,您應該看到需要結合的兩個部分:告訴鏈接器插入哪個庫以及在哪里找到它。

g++ main.o -lboost_system -L C:/boost/boost_1_61_0/stage/lib

暫無
暫無

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

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