関数 'asprintf' の暗黙の宣言による警告の解消
2022-02-22 09:39:48
asprintfは非常に使いやすいのですが、CライブラリのGNU拡張であるため、以下のような警告が出て使用されることが多いようです。
警告:関数 'asprintf' の暗黙の宣言 [-Wimplicit-function-declaration]
調査の結果、asprintfのヘッダーファイルは stdio.h で、そのヘッダーファイルの中に
#ifdef __USE_GNU
/* Write formatted output to a string dynamically allocated with `malloc'.
Store the address of the string in *PTR. */
extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
_G_va_list __arg)
__THROW __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
extern int __asprintf (char **__restrict __ptr,
__const char *__restrict __fmt, ...)
__THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
extern int asprintf (char **__restrict __ptr,
__const char *__restrict __fmt, ...)
__THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
#endif
しかし __USE_GNU はglibcの内容をマクロで定義したもので、自分たちのコードでは定義できないので、どう修正すればいいのか?
<スパン 解決策
makefile にコンパイルオプション -D_GNU_SOURCE を追加します。
CMakeを使用している場合、add_definitions (-D_GNU_SOURCE)を追加する必要があります。
もし、#ifdef __USE_GNU のような問題が発生した場合は、上記のように設定することで解決を試みることができます。
関連
-
Vueはeslintrc.jsファイルを設定することで、no-trailing-spacesやno-undefなどのコンパイル時のエラーを修正することができます。
-
vc++ プロンプトでインクルードファイル 'afxres.h' を開けない ---VC インストールのセットアップ問題
-
未定義のエラーのプロパティ 'replace' を読み取ることができません。
-
Gulpのマルチタスクエラーです。AssertionError [ERR_ASSERTION]: タスク関数を指定する必要があります ソリューション
-
java introduces package error この行のマーカーは複数あります。
-
python encountered a problem: No handlers could be found for logger *.
-
Androidのパッケージ名変更とパッケージ名エラーに対応するクライアントが見つからない場合の解決策
-
raise NotImplementedError
-
閉じたファイルへのI/O操作。
-
Python で 'str' と 'int' のインスタンス間でエラー '>=' がサポートされていない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
cmake :pthread_createへの未定義の参照、CMakeがpthreadライブラリを必要とする問題
-
undefinedエラーが発生しました:getaddrinfo ENOTFOUND; GETできません。
-
エラーです。アクセス制限です。タイプ 'OperatingSystemMXBean'はAPIではありません(必要なライブラリに制限があります)。
-
typedef void (*Fun) (void) 理解 - 関数ポインタ - typedef 関数ポインタ
-
AttributeError: 'dict' オブジェクトは 'append' という属性を解決していません。
-
error unable to access jarfile Solution
-
ModuleNotFoundError を解決する。Pythonに'tensorflow._api'という名前のモジュールはありません。
-
liunx, makeでmysqlをインストール *** ターゲットが指定されておらず、makefileも見つかりませんでしたので停止しました。
-
tf.variable_scope パラメータ
-
ローカル変数sumが初期化されていない可能性がある