2014-02-27 28 views
0

我忙於編譯和使用以下使文件編譯動態鏈接庫中的C++與運行路徑問題

driver.so:driver.cpp 
     g++ -c driver.cpp -o driver.so 
     g++ -L/tokenlib/libtokenlib.so driver.so -o linked 

鏈接C++程序,但我得到的錯誤

g++ -c driver.cpp -o driver.so 
g++ -L/tokenlib/libtokenlib.so driver.so -o linked 
driver.so: In function `main': 
driver.cpp:(.text+0x9): undefined reference to `tokenlib::acquire_token()' 
collect2: error: ld returned 1 exit status 
make: *** [driver.so] Error 1 

和我的文件層次結構是

/root 
    makefile 
    driver.cpp 
    /tokenlib 
     libtokenlib.so 

有人告訴我,添加-Wl,-rpath =/tokenlib到我的G ++竟被arguements d解決問題,所以我試圖這樣

driver.so:driver.cpp 
     g++ -c driver.cpp -o driver.so -Wl,-rpath=./tokenlib 
     g++ -L/tokenlib/libtokenlib.so driver.so -o linked -Wl,-rpath=./tokenlib 

但它仍然無法正常工作。

我一個完整的新手和任何幫助,將不勝感激。

+0

'-L/tokenlib/libtokenlib.so'應指向一個路徑,而不是一個文件? –

+0

不幸的是,這似乎給了我同樣的錯誤。我改成了G ++ -L/tokenlib driver.so -o連接,或者如果我嘗試的g ++ -L/tokenlib tokenlib.so driver.so -o連接我得到G ++:錯誤:tokenlib.so:沒有這樣的文件或目錄 – Gottfried

回答

0

的鏈接通常是指.a(存根)庫,而不是.so文件!
-L選項指定的路徑,則lnker應採取的帳戶。
-l<mystuff>選項嘗試解決一個名爲任何的-L選項,或者編譯器內在庫搜索路徑給定的路徑的的libmystuff.a庫。