2011-02-08 121 views
3

我想用CMake建立一個靜態二進制。CMake:建立一個靜態二進制

我環顧四周,發現一些非描述性的解決方案(例如添加鏈接標誌「-static」),但我不知道如何對它們進行測試。

我怎麼知道,如果某些庫(如線程)已被靜態地內置到我的二進制?

回答

1

不CMake的相關,但如果你是在UNIX系統上file公用事業至少可以告訴你,你的二進制文件是否在使用共享庫與否。

1

在Linux下你也可以使用ldd命令,它顯示了你的庫二進制文件鏈接到動態。

3

由於trenki說,使用ldd來獲取你的可執行文件依賴於動態鏈接庫的列表,並檢查,以確保你想要靜態鏈接的代碼是那裏。

您還可以使用nmstrings命令分別獲取可執行文件中的編程符號和人類可讀文本的轉儲。使用grep來篩選靜態庫中您在代碼中引用的標識符的輸出,例如函數名稱。

最後,您可以使用objdump命令讓你的程序的反彙編列表。靜態庫函數應該出現在它中。

第一種方法,再加上編譯,鏈接,並運行良好,足以證明靜態庫有助於提供的功能的可執行文件可能是一個足夠的測試。只有在想要深入挖掘時才使用第二種或第三種方法。