2017-03-16 70 views
-1

還沒有找到一個,但是有沒有一個開關來排除任何調試數據以及對生成代碼中的本地(自己)函數的明文引用?g ++切換不包含自己的符號函數名稱(和調試數據) - ?

簡單的例子:

void setenv(char* in_str) { 
} 

...給我的可執行文件,這實在是沒有必要的,除非它是一個解釋性語言可讀的「SETENV」的名字。

也在可執行文件 - 變量的文本名稱,這是更奇怪的。

==========

編輯:

迄今爲止嘗試的Solaris條,GNU條,克++ -O0和-s開關。刪除相關符號的唯一方法是從目標文件(但不是可執行文件)「strip --strip-all」,但不會鏈接。

所以它看起來像理查德C是正確的,這確實需要lib *運行時。

+0

或者是後期綁定到運行時共享庫​​。 –

+0

在我的情況下,只使用std命名空間,代碼中的符號名稱是自己的本地函數。 –

回答

2

您既可以使用gnu strip命令行工具,也可以鏈接gcc -s標誌。請注意,唯一的好處將是減小文件大小。如果您在調試器中運行應用程序或者生成堆棧跟蹤,則只會將這部分二進制文件加載到內存中。我更喜歡使用strip命令,因爲您可以單獨保存調試信息,並在出於某種原因想要獲取堆棧跟蹤時加載它。

例子:

g++ -o myexecutable ... 
strip --strip-unneeded myexecutable 

g++ -s -o myexecutable a.o b.o c.o ... 
相關問題