我想除本地安裝(在我的家庭文件夾(Linux),說$ HOME/boost)boost C++庫,除了系統範圍內安裝的默認的升壓庫。我用魔法建造它們,並且工作得很好。鏈接器不使用本地(用戶)升壓安裝與g ++
之後,我設置了環境變量CPLUS_INCLUDE_PATH和LD_LIBRARY_PATH以匹配本地安裝的目標,因此它們分別指向$ HOME/boost/include和$ HOME/boost/lib /。
爲了測試這一點,我用下面的代碼測試CPLUS_INCLUDE_PATH的正確使用的標題:
#include <boost/version.hpp>
#include <iostream>
#include <iomanip>
int main()
{
std::cout << "Boost version: " << BOOST_LIB_VERSION << std::endl;
return 0;
}
與g++ -o Test_boost_version test_boost_version.cpp
作品編譯它如預期,報告預期(本地)版本。讓CPLUS_INCLUDE_PATH爲空,可以爲我提供默認的系統範圍安裝的升級版本。到現在爲止還挺好。
爲了測試鏈接,我用下面的代碼(從升壓主頁採取:
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
std::string line;
boost::regex pat("^Subject: (Re: |Aw:)*(.*)");
while (std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
}
與g++ -o Test_boost_linking test_boost_linking.cpp -lboost_regex
建造它
調用ldd Test_boost_linking
但是不使用本地的。安裝(通過LD_LIBRARY_PATH提供)但給我:libboost_regex.so.1.42.0 => /usr/lib/libboost_regex.so.1.42.0 (0x00007f9264612000)
當我使用g++ -o Test_boost_linking test_boost_linking.cpp -lboost_regex -L$HOME/boost/lib
時,ldd正在報告正確的庫(libboost_regex.so.1.50.0 => $HOME/boost/lib/libboost_regex.so.1.50.0 (0x00007f6947d2a000)
)。
對我來說,這實際上是一個問題,因爲我想設置我的本地環境,這樣編譯將忽略系統默認的升壓安裝,只使用本地安裝,我認爲這正是設置CPLUS_INCLUDE_PATH和LD_LIBRARY_PATH,但對於後者,這似乎不適用。
那麼如何確保使用g++ -o Test_boost_linking test_boost_linking.cpp -lboost_regex
(不含-L)使用本地庫?
[編輯]進一步思考,我想知道如果它實際上是絕對必須在命令行中使用「-L $ HOME/boost/lib」(使用LDFLAGS作爲環境變量似乎沒有效果,可能只是與Makefile結合使用)在非標準目錄中使用庫時?是這樣嗎?
(順便說一句,我認爲這將持有真也爲其他圖書館,不僅提高...)
(我用:G ++(Debian的4.4.5-8)4.4.5)
謝謝您。
謝謝,這顯然是訣竅!我之前曾嘗試過這個變量,但由於某種原因我放棄了該變量,但顯然出現了錯誤。 – Shadow 2012-07-25 08:09:19