2016-02-05 64 views
1

是否可以使用g ++編譯程序,以便共享庫等等被包含在可執行文件中?用C++編譯並準備好可執行文件

我有一個C++程序,我想編譯和運行在另一個地方,我錯過了一些庫,沒有安裝訪問權限。

主要的原因,我無法找到答案,這可能是我不知道怎麼叫吧..

+4

我想你需要使用庫的靜態版本來編譯(和鏈接)。如果您只有動態庫,則必須嘗試將它們重新編譯爲靜態庫。 – MiMo

回答

2

不,這是不可能的。

靜態鏈接(與-static),因此它不使用任何共享庫,或將共享庫與可執行文件一起復制到其他位置。

由於共享庫不在動態加載程序的通常搜索路徑中,因此您需要確保可以找到它們,方法是在運行程序時設置LD_LIBRARY_PATH環境變量,或者在可執行文件中設置RPATH時你建立它。 (假設您正在使用GNU鏈接器...)要在'-Wl,-rpath,$ORIGIN'(引號很重要,要阻止$ORIGIN被shell展開)的可執行文件鏈接中設置RPATH,請執行以下操作:這意味着加載器將在與可執行文件本身相同的目錄中查找共享庫。

查看https://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_pathshttps://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic瞭解更多信息。

+2

@jorgen當遵循Jonathans的建議並在與應用程序相同的目錄中安裝共享庫時,可以使用'$ LD_LIBRARY_PATH =。; $ {LD_LIBRARY_PATH} ./ '(它臨時添加當前工作直到路徑)。 – Murphy

相關問題