来自autoconf测试的错误编译命令
Bad compilation command from autoconf test
我正试图为C++库编写一个autoconf测试。我紧随其后http://nerdland.net/2009/07/detecting-c-libraries-with-autotools/。我的支票是这样的:
SAVED_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -lMyLib"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([#include <mylibheader.hpp>],
[MyLibNamespace::SomeObject obj()])],
[TEST_LIBS="$TEST_LIBS -lMyLib"] [HAVE_MYLIB=1],
[AC_MSG_ERROR([libMyLib is not installed.])])
LDFLAGS=$SAVED_LDFLAGS
测试失败。如果我检查config.log,问题似乎是autoconf为检查提供的生成编译命令:
g++ -o conftest -g -O2 -lMyLib conftest.cpp
正如您所看到的,在所有的输入和输出之后,-l参数并不在末尾。如果我复制&粘贴config.log中的conftest.cpp代码,我可以使用进行编译
g++ -o conftest -g -O2 conftest.cpp -lMyLib
autoconf怎么会出错?我该怎么解决这个问题?
问题是将-lMyLib
添加到LDFLAGS
,而不是添加到LIBS
。换句话说,改为这样做:
SAVED_LIBS=$LIBS
LIBS="-lMyLib $LIBS"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([#include <mylibheader.hpp>],
[MyLibNamespace::SomeObject obj()])],
[TEST_LIBS="$TEST_LIBS -lMyLib"] [HAVE_MYLIB=1],
[AC_MSG_ERROR([libMyLib is not installed.])])
LIBS=$SAVED_LIBS
编辑:库的链接顺序很重要,所以我更新了LIBS=
行,以便在其他库(如果有的话)之前链接MyLib
,并假设MyLib
可能依赖于其他库。
相关文章:
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- make 命令如何避免重新编译未更改的源文件?
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- 使用 Powershell 命令将 cpp 文件的文件夹编译为 GNU 的 g++
- 通过命令行在Visual Studio中编译单个独立文件
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 使用 MinGW 在 Windows 上的命令行编译C++文件
- 如何在 vscode 扩展名中检索 C/C++ 文件的编译命令
- 如何使用msbuild和设置C++17命令行编译Visual Studio项目?
- clang 交叉编译命令找不到头文件
- CPP 中 z3 的编译和执行命令?
- 选择特定版本的 Visual Studio 命令行工具包,并根据特定版本的C++运行时环境编译文件
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 如何覆盖 Visual Studio 2017 社区的编译命令
- 快捷方式在C 中编写自定义编译命令时
- 指定netbeans用来编译C++程序的完整编译命令
- 编译命令有效,但运行命令无响应
- Netbeans :在编译命令末尾添加"Compile Line - Additional Options" "-lboost_system"
- 在 G++ 编译命令中包含 -std=c++0x 有什么意义?
- 来自autoconf测试的错误编译命令