私は最近、公共のヘッダの中にHAVE_FEATUREFOO
のような変数を使用するライブラリを見つけました。パブリックヘッダに `AC_DEFINE`と` AC_DEFINE_UNQUOTED`で定義された変数を正しく使うには?
また、文#include "config.h"
を含むものも含まれます。これらの宣言は構造体宣言でも使用され、構造体のメンバーを条件的に削除します。ライブラリのビルドや依存するプログラムのビルドに使用される値の不一致は、メモリの破損につながります。
ので、ライブラリの使用とそれのヘッダには、次のことができた結果:
#include "config.h"
が失敗し、- または実行時にメモリ破損。
私はautotoolsの新機能ですが、私が見つけた調査の結果、AC_DEFINE
or AC_DEFINE_UNQUOTED
を使って定義されています。そしてconfig.h
はAC_CONFIG_HEADERS
を使用して生成されます。
さらに調査したところ、include_HEADERS
というヘッダーがインストールされています。そして、ヘッダconfig.h
が正しくインストールされます(リストに追加されている場合)。
AC_CONFIG_HEADERS
によってconfig.h
ヘッダーファイルを自動ツールでインストールすることは正しい方法ですか?