[英]Linking Boost library on Cygwin
我已經在這里待了幾個小時,所以我來這里尋求幫助。 可以肯定的是,我幾乎已經弄清楚了,但是我仍然boost::system::generic_category
對boost::system::generic_category
和boost::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.