簡體   English   中英

在OS X上用clang編譯boost regex時出現鏈接錯誤

[英]linking error when compiling boost regex with clang on OS X

我嘗試使用boost :: sregex_iterator編寫C ++程序,並在嘗試編譯時收到鏈接錯誤。 過去,我已經成功地使用了boost multiprecision,所以我知道至少成功安裝了一些boost庫。 我正在使用clang(Apple LLVM版本6.1.0(clang-602.0.49))在OS X 10.10.3上進行編譯。

我的程序中包括:

  #include <boost/multiprecision/gmp.hpp>
  #include <boost/regex.hpp>

我正在使用命令行:

 c++ -I /usr/local/boost_1_57_0 input.cpp -lgmp -o words

我收到的錯誤消息很長,但開頭是:

 Undefined symbols for architecture x86_64:
 "boost::basic_regex...

我已經閱讀了許多其他有關人也有類似問題的問題,例如: 如何使用clang鏈接boost庫1.54? 從響應中可以看出,我應該鏈接-lboost_regex-mt,但是當我將其添加到命令行中時,會收到消息:“ ld:未找到庫”。

我的問題是,如果問題僅在於我需要libboost_regex-mt,有沒有一種方法可以在不重新安裝所有boost的情況下進行安裝? 如果確實需要重新安裝boost,那么這次應該做些什么,以便最終使用regex庫? 如果不是-lboost_regex-mt問題,我需要怎么做才能使用boost regexes?

在這里回答。

據推測,如果正確安裝了boost,則除了頭文件外,還應該具有庫。 但是,您缺少“ -L”選項,該選項指示libboost_regex-mt.so的住處。 如果沒有該選項,鏈接器將僅使用其默認搜索路徑來查找庫,並最終抱怨是否找不到該庫。

(可選)您可以使用鏈接器的rpath選項在可執行文件中嵌入庫搜索路徑。 這將在運行可執行文件時解析.so的位置。 一種替代方法是修改LD_LIBRARY_PATH環境變量以包括庫的位置。

因此,您的示例應類似於:

c++ -I /usr/local/boost_1_57_0 input.cpp -lgmp -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lboost_regex-mt -o words

...假設該庫位於/ usr / local / lib下。

暫無
暫無

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

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