2011-03-24 157 views
0

我一直在拉我的頭髮,試圖找出如何用boost regex編譯我的應用程序。c/C++ boost - 編譯問題

我已經安裝了提升,從源頭在CentOS 5

g++ -lboost_regex -o my_app my_app.c $(mysql_config --libs --cflags) 

它編譯沒有任何錯誤,但是當我執行它:

error while loading shared libraries: libboost_regex.so.1.46.1: cannot open shared object file: No such file or directory 

該文件的位置是:

/usr/local/lib/libboost_regex.so.1.46.1 

任何人都會遇到同樣的問題?

+1

鑑於這是關於Boost,爲什麼C標籤和問題標題中的「C/C++」?不應該這是直C++? – 2011-03-24 16:43:48

回答

3

您是否嘗試過LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH your_program以確定它知道在哪裏可以找到共享對象?當您使用-Wl,-R/usr/local/lib進行鏈接時,您可以設置路徑。

編輯:更清楚的是,當你鏈接你的代碼時,鏈接器會將RPATH和RUNPATH嵌入到二進制文件中。這些值告訴運行時加載程序在哪裏查找所需的共享對象。

如果您將-Wl,-R/usr/local/lib添加到您的鏈接命令中,應該導致它嵌入該目錄並在加載程序時始終檢查它。

+0

工作!但是,是否有辦法永久設置LD_LIBRARY_PATH,因此我不必在每次應用程序的路徑之前調用它? – Joe 2011-03-24 15:47:36

+0

對不起,你最後一次錯誤,我是一個C++新手。我已經將-R/usr/local/lib添加到g ++編譯命令中,但它給了我「g ++:無法識別的選項」-R'「 – Joe 2011-03-24 15:58:47

+0

@Joe你說的對,它是一個鏈接器選項,所以你必須通過它通過'-Wl',我確定了我的答案。 – 2011-03-24 16:10:46

0

試試這個。

$ LD_LIBRARY_PATH=/usr/local/lib:LD_LIBRARY_PATH
$ export LD_LIBRARY PATH

現在試着告訴我們發生了什麼。