AC_CHECK_FUNCS找不到shm_open

时间:2013-02-18 06:04:59

标签: gcc configuration linker ghc configure

我在构建试图检查shm_openshm_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

两个检查之间的唯一区别似乎是-lrt参数的位置。当我尝试手动在一个简单文件上运行gcc时,我得到相同的行为,即只有在源文件输入后-lrt出现时链接才会成功。

那么,我需要做什么configure才能确定shm_openshm_unlink是否存在?我怀疑这对我的系统是特别的,因为我正在配置的项目被广泛使用(与ghc编译器捆绑在一起的unix包),并且它曾经工作(当我在不同的时候构建这个包时)使用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

谢谢!

1 个答案:

答案 0 :(得分:0)

宏有完整格式:

AC_CHECK_LIB (library, function, [action-if-found], [action-if-not-found], [other-libraries])

请注意other-libraries。此选项特别适用于您描述的情况 - 传递-lm-lrt和其他常见人员以避免链接器排序中未解析的引用。

查看文档页面,了解有关AC_CHECK_LIB

的更多信息