と の存在をチェックしようとするプロジェクトの構築に問題がshm_open
ありshm_unlink
ます。関連する configure.ac の行は次のとおりです。
# Avoid adding rt if absent or unneeded
AC_CHECK_LIB(rt, shm_open, [EXTRA_LIBS="$EXTRA_LIBS rt" CFLAGS="$CFLAGS -lrt"])
# needs -lrt on linux
AC_CHECK_FUNCS([shm_open shm_unlink])
行はAC_CHECK_LIB
成功AC_CHECK_FUNCS
しますが、両方とも失敗します。をのぞいてみるとconfig.log
、なるほど
configure:4133: checking for shm_open in -lrt
configure:4158: /usr/bin/gcc -o conftest -fno-stack-protector -Wl,--hash-size=31 -Wl,--reduce-memory-overheads conftest.c -lrt >&5
configure:4158: $? = 0
configure:4167: result: yes
configure:4178: checking for shm_open
configure:4178: /usr/bin/gcc -o conftest -fno-stack-protector -lrt -Wl,--hash-size=31 -Wl,--reduce-memory-overheads conftest.c >&5
/tmp/ccg0yu56.o: In function `main':
conftest.c:(.text+0xa): undefined reference to `shm_open'
collect2: ld returned 1 exit status
2 つのチェックの唯一の違いは、-lrt
引数の位置のようです。単純なファイルに対して手動で gcc を実行しようとすると、同じ動作が得られます。つまり、リンク-lrt
はソース ファイルの入力後にのみ成功します。
configure
それで、それを決定しshm_open
て存在するために私は何をする必要がありshm_unlink
ますか?私が構成しているプロジェクトはかなり広く使用されており ( unix
ghc コンパイラーにバンドルされているパッケージ)、以前は機能していたため (gcc-4.4 を使用して別のシステムでこのパッケージをビルドしたとき)、これは私のシステムに特有のものであると思われます。 .5、それは機能しましたが、その環境は利用できなくなりました)。私の好ましい解決策は、システム/環境への変更、または構成するフラグの組み合わせのいずれかですがconfigure.ac
、アップストリームに送信できる標準的な変更があれば、それも受け入れられます。
CFLAGS と LDFLAGS のさまざまな組み合わせを試しましたが、-lrt
フラグは常に入力ファイルの前に表示されるため、チェックは失敗します。
私のシステムはUbuntu 12.04(正確)です
$gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
$ uname -a
Linux hostname 3.2.0-26-generic #41-Ubuntu SMP Thu Jun 14 17:49:24 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
ありがとう!