0

リンク時に次の警告が表示されます。

/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/opt/oracle/11.2.0.3/lib -lclntst11 [...] でリンクします

この警告を非表示にする方法はありますか?
ビルドログを汚染しています(Oracleクライアントを使用する数十の実行可能ファイルを入手しました)。

-isystem外部ライブラリからの警告の数を減らすことについて知っていますが、それはヘッダーのみです。

ありがとう。

4

2 に答える 2

1

私は自分のプログラムのどこかに以下を入れました(リンク先のライブラリではありません):

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

リンカは、libc.so の定義よりも優先してその定義を使用します ...しかし、これは、ライブラリが実際に呼び出さない場合にのみ問題ありませんmktemp! 私の場合、それを参照するライブラリにリンクしていることはわかっていますが、それを呼び出す機能は使用していません。プログラムで使用されているコードが呼び出しmktempを行うと、プログラムは中止されます。

別の方法として、 の独自の定義を提供し、それが作成するファイルmktempを使用および削除して実装することもできますが、 (は基本的に壊れた API です)mkstempと同じ危険な競合状態が依然としてあります。mktempmktemp

壊れた API に依存するライブラリを提供しているとして、Oracle に文句を言うべきです。

于 2013-07-04T11:02:45.110 に答える
-1

この警告を非表示にする方法はありますか?

確かに:libcソースから再構築して削除します[警告:これにはルート権限が必要であり、誤って実行するとシステムが起動できなくなる可能性があります]

しかし、なぜあなたはしたいのですか?警告を理解し、それを無視することを選択した場合、... 無視しますか?

警告を理解していない場合は、理解する必要があります。

于 2013-07-04T02:14:43.880 に答える