2010-02-23 54 views
2

我想知道在編譯後在Unix中更改* .a文件的版本信息(如果可能的話)。 我知道如何做到這一點在Windows中的Dll文件 - 但不知道如何在Unix中管理它。如何在編譯後更改* .a文件的版本信息

謝謝大家!

+0

你在說什麼「版本信息」?哪個工具會顯示它? – 2010-02-23 15:03:31

回答

3

靜態庫只是.o文件的存檔 - 它們不會自己嵌入版本,除非您的代碼以某種方式發佈了包含版本信息的符號。

像:

int libFoo_version = 0x01000000; 

或者你可以使用

char* libFoo_version = "1.0"; 

事後結合使用類似strings libFoo.a | grep libFoo_version命令sed改變的版本信息。

另一種選擇是在存檔中嵌入一個空文件,該文件的名稱包含版本信息。 YMMV

+0

謝謝, 但最終用戶如何知道這包含版本信息?我必須明確提及它嗎? 是不是有一個通用的方法? – rkellerm 2010-02-23 12:56:59

+1

沒有通用的方法。您可能想要提供一個API來檢索版本信息。 – 2010-02-23 13:56:02

+0

ranlib是一個正確的解決方案嗎? – rkellerm 2010-02-23 14:46:58

1

靜態庫本身沒有版本信息。

0

如果版本是源代碼的一部分(例如,字符串常量),那麼只要使用sed來更改它,如果新版本的長度與舊版本相同。

+0

嗨, 我被告知ranlib可能會做這項工作。 這是正確的嗎? 謝謝! – rkellerm 2010-02-23 13:15:35

+0

ranlib只是創建庫中符號的索引(相當於'ar -s')。 – 2010-02-23 15:02:58

相關問題