gpt4 book ai didi

c - 当 .h 文件清楚可用时,为什么 autoconf 不通过 AC_CHECK_HEADER 测试?

转载 作者:太空狗 更新时间:2023-10-29 16:52:52 24 4
gpt4 key购买 nike

我花了很长时间让 autoconf 检查特定头文件的存在。

我们称头文件依赖项为“inky.h”,假设 inky 是一个(单独)安装的库,前缀设置为“/usr/local”。这将“inky.h”放入/usr/local/inky/inky.h 并将 libinky.so 放入/usr/local/lib。

现在,我正在尝试验证我的应用程序 configure.ac 中是否存在 inky.h,如下所示:

dnl # Setup temp LDFLAGS and look for inky library/header
LDFLAGS_SAVE=${LDFLAGS};
CPPFLAGS_SAVE=${CPPFLAGS};

dnl # Look for inky on the user specified inky install path
LDFLAGS ="-L${inky_library_path}";
CPPFLAGS="-I${inky_include_path}/inky";

AC_MSG_NOTICE([Looking for inky.h using: ${CPPFLAGS}]);

dnl # This check finds inky.h just fine. This check was only used for debugging
AC_CHECK_FILE(
[${inky_include_path}/inky/inky.h],
[AC_MSG_NOTICE([Found inky.h])],
[AC_MSG_NOTICE([Didn't find inky.h])]
)

dnl # Look for the inky header file. If it isn't found, terminate.
AC_CHECK_HEADER(inky.h,
[],
[AC_MSG_ERROR([Couldn't find or include inky.h])]
)

这会从 ./configure 产生以下输出(在 autoreconf -vfi 之后):

configure: Looking for inky.y in fetk include path: -I/usr/local/include/inky.y
checking for /usr/local/include/inky/inky.h... yes
configure: Found inky.h
checking inky.h usability... no
checking inky.h presence... yes
configure: WARNING: inky.h: present but cannot be compiled
configure: WARNING: inky.h: check for missing prerequisite headers?
configure: WARNING: inky.h: see the Autoconf documentation
configure: WARNING: inky.h: section "Present But Cannot Be Compiled"
configure: WARNING: inky.h: proceeding with the compiler's result
checking for inky.h... no
configure: error: Couldn't find or include inky.h

现在,情况似乎是这样,因为 inky.h 包含 2 个其他 header ,所以我将它们添加到 AC_CHECK_HEADER 的第四个参数中,如下所示:

dnl # Look for the inky header file.  If it isn't found, terminate.
AC_CHECK_HEADER(inky.h,
[],
[AC_MSG_ERROR([Couldn't find or include inky.h])],
[dinky.h plinky.h]
)

从 ./configure 中呈现此输出:

configure: Looking for inky in fetk include path: -I/usr/local/include/inky
checking for /usr/local/include/inky/inky.h... yes
configure: Found inky.h
checking for inky.h... no
configure: error: Couldn't find or include inky.h

我对 autoconf 束手无策。有谁知道我哪里出错了。是否可以配置以提供有关失败原因的更多详细信息?为什么我可以找到文件本身,但 AC_CHECK_HEADER 宏却失败了?

此外,请不要告诉我使用不同的软件包分发套件。我自己永远不会选择 Autoconf,但我确实必须向预先存在的项目添加一些依赖项。

另请注意,实际库并未命名为“inky”。但是,这个项目存在“仅供官方使用”的问题,所以我更改了名称以保护...嗯,保护我自己!

[编辑 - 关闭]想通了这个问题。看我的回答。

最佳答案

我发现了问题所在。我正在使用的库是一个 C 库,但是我链接的“inky”库是一个 C++ 库。因此,语言 (AC_LANG) 在 configure.ac 脚本的早期设置为 C。在执行“inky”检查时,我需要将语言更改为 C++,以便 Autoconf 使用 C++ 编译器而不是 C 编译器。这很容易通过使用完成:

AC_LANG_PUSH([C++])
dnl # Do the checks for inky
AC_LANG_POP([C++])

这既解决了我在此线程中询问的问题,也解决了我尚未发布的问题,其中我无法使 AC_CHECK_LIB 宏工作。

谢谢大家的意见。

关于c - 当 .h 文件清楚可用时,为什么 autoconf 不通过 AC_CHECK_HEADER 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6128987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com