2014-03-31 36 views
0

在我得到通過可執行的那一刻G ++編譯uisng:如何使可執行的二進制文件,即心不是依賴於.so文件

g++-4.8 test test.cpp -I /home/pottsie/Documents/Cpp-REST-SDK/casablanca/Release/include/ -lcasablanca -std=gnu++11 

然而,當我嘗試另一臺機器我得到的關於該可執行文件錯誤:

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

反正是有創造,這並不需要我我要上運行它的計算機上安裝卡薩布蘭卡一個可執行文件?

+1

使靜態庫,而不是共享一個(如果你擁有源) –

回答

2

您可以添加-static靜態鏈接到您需要的庫。當然,你需要把它們當作.a

g++-4.8 test test.cpp -I /home/pottsie/Documents/Cpp-REST-SDK/casablanca/Release/include/ -static -lcasablanca -std=gnu++11 
+0

作爲一個旁註:如果你只需要卡薩布蘭卡進行靜態鏈接,你可以只下降了-l後綴。 -static會嘗試靜態鏈接所有內容(影響可移植性) –

+0

是否有其他方式?我不幸沒有一個.a文件... – Pottsiex5

+0

@DavidKernin如果你放下'-l'前綴(這是我認爲你的意思),你必須指定庫的完整路徑名。要僅靜態鏈接'casablanca',請將其包裝在'-Wl,-Bstatic -lcasablanca -Wl,-Bdynamic'中。 (但是你可能希望所有的基本系統庫都靜態鏈接,在這種情況下,你必須像上面那樣包裝所有的東西,再加上'-static-libstdC++'選項。) –

相關問題