我在構建試圖檢查shm_open
和shm_unlink
的存在的項目時遇到問題。 configure.ac的相關線路是:AC_CHECK_FUNCS找不到shm_open
# 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
看來,兩次檢查之間的唯一區別是-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
謝謝!
現在,我可以用LIBS = -lrt配置解決這個問題。現在留下這個問題,希望能有更好的解決方案出現。 – 2013-02-19 01:20:38
黑客的建議:'' - WLL,''不需要'(iirc)'CFLAGS'? – 2013-02-23 20:05:41