2013-07-03 80 views
0

我得到在鏈接時下列警告警告始發:G ++ - 禁用鏈接時外部的lib

/opt/oracle/11.2.0.3/lib/libclntst11.a(cc_memory.o): In function `krb5_mcc_generate_new': 
cc_memory.c:(text.unlikely+0xd3d): warning: the use of `mktemp' is dangerous, better use `mkstemp' 

我用'G ++鏈接[...] -L /選擇/ ORACLE/11.2.0.3/lib -lclntst11 [...]

有沒有辦法隱藏這個警告?
它污染了構建日誌(有數十個使用Oracle客戶端的可執行文件)。

我知道關於-isystem來減少來自外部庫的警告的數量,但僅用於標題。

謝謝。

回答

1

我把我的程序以下的地方(而不是在圖書館它鏈接到):

// to silence warnings when linking to libwhatever.a 
extern "C" char* mktemp(char*) { __builtin_abort(); } 

連接器將使用的定義優先於一個在libc.so ...... 如果圖書館從未真正撥打mktemp,這只是確定!就我而言,我知道我鏈接到一個引用它的庫,但我從不使用調用它的功能。如果程序使用的代碼確實調用了mktemp,那麼它會中止。

另一種方法是提供自己的mktemp定義,可能使用mkstemp,並刪除它創建該文件的執行,儘管仍然有同樣的危險的比賽條件mktemp有(mktemp基本上是一個破碎的API。)

您應該向Oracle抱怨提供依賴於破損的API的庫。

+0

謝謝喬納森。質量答覆一如既往。 –

-1

有沒有辦法隱藏這個警告?

肯定的:重建libc從源頭上刪除[警告:這可能需要超級用戶權限,如果操作不當,可能會導致系統無法啓動]。

爲什麼你想要?如果您瞭解警告並選擇忽略它,那麼...忽略它?

如果您不明白警告,您應該。