linux - 检测 m4 文件中的 ld 标志

标签 linux macos ld autoconf

我有一个 .m4将一些标志附加到链接器的文件,其中之一设置 rpath 标志。此脚本最初是为使用 -rpath=<value> 的 ld 的 GNU 版本编写的,但是,我试图在 OSX 上运行脚本,其中 ld 的版本使用 -rpath <value> .最终结果是我在 config.log 中看到了这个:

ld: unknown option: -rpath=path/to/stuff

有没有办法检测 ld 如何期望从我的 .m4 中传入标志?文件,以便我可以根据可用版本输出正确的格式?

最佳答案

您可以尝试使用 AC_LINK_IFELSE 检测给定标志的链接是否成功脚本中的宏,例如:

AC_MSG_CHECKING([for rpath flag style])

saved_cflags="$CFLAGS"
CFLAGS="$CFLAGS -Wl,-rpath=."
AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){ return 0;}])],
               [RPATH_FLAG=gnu],
               [RPATH_FLAG=none])
CFLAGS="$saved_cflags"

if test "x$RPATH_FLAG" = "xnone"; then
CFLAGS="$CFLAGS -Wl,-rpath,."
AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){ return 0;}])],
               [RPATH_FLAG=llvm],
               [RPATH_FLAG=none])
CFLAGS="$saved_cflags"
fi

AC_MSG_RESULT([$RPATH_FLAG])

并根据此检测设置适当的标志。

关于linux - 检测 m4 文件中的 ld 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29780102/

相关文章:

c++ - 在 C 或 C++ (mac OSX) 中拥有 KeyDown 事件

c++ - ld:在 mac 上找不到体系结构 x86_64 的符号

linux - 我的 Linux 可执行程序中的段 00 是什么(64 位)

Gcc/ld 警告 "liba"需要 "libb",未找到,但属于 rpath 的一部分

c - 我应该使用什么方法来知道在进程 fork 然后执行后打开了哪些 fds

linux - 在 Linux 中不关机重新枚举和使用 PCIe SSD

linux - 计算终端中打开的标签页数

mysql - 安装 MariaDB 归档引擎

sql - 如何在MAC OSX中拆分SQL?

swift - 初始加载后未触发 viewDidAppear