2013-04-27 166 views
7

我有一些代碼需要在沒有root訪問權限的計算機上運行。 該機器沒有運行此代碼所需的一些庫。C - 編譯包含的依賴關係

當我編譯時,是否有任何方式來包含所有的依賴關係?我意識到結果文件可能相當大。

回答

7

你在找什麼是靜態編譯。進行靜態編譯包括所有的庫到可執行文件本身的,所以你不必擔心,因爲很多關於依賴性鏈的特定系統,配送等上

你可以做到這一點有:

gcc -Wl,-Bstatic -llib1 -llib2 file.c 

-Wl將標誌傳遞給鏈接器,-Bstatic指示它將鏈接靜態化(如果可能),然後lib1,lib2是您要鏈接的庫。

或者,嘗試:

gcc -static-libgcc -static file.c 

編譯仍需要匹配非特權系統的體系結構。你需要安裝編譯系統(lib.a)

如果編譯正確的靜態庫,它應該顯示「不是一個動態可執行文件」當您運行:

ldd a.out 
+0

感謝。我確認後會確認,但我認爲這正是我之後的事情! – Hector 2013-04-27 00:20:32

+0

好吧,現在我明白了這個看起來很奇怪 /usr/bin/ld:找不到-lgcc_s 我所添加的所有內容都是你在 – Hector 2013-04-27 00:41:23

+0

之後用-openssl建議的內容:'-static-libgcc'和' -static-libstdC++'(如果使用C++) – 2013-04-27 00:48:58