gpt4 book ai didi

linker - 链接共享库 Autotools

转载 作者:行者123 更新时间:2023-12-01 11:42:30 25 4
gpt4 key购买 nike

我是一个 autotools 初学者,我似乎无法弄清楚如何通过 autotools 正确使用外部库。

这是我的目录层次结构。

.
├── configure.ac
├── Makefile.am
├── README
└── src
(source files)
└── Makefile.am

图书馆的名字是 acml_mp并且默认安装在 /opt/acml5.3.1/gfortran64/lib .还有一个目录叫 /opt/acml5.3.1/gfortran64/include包括。当我在没有 autotools 的情况下编译时,包括通常的编译器标志工作正常:
g++ ... -L/opt/acml5.3.1/gfortran64_mp/lib -I/opt/acml5.3.1/gfortran64_mp/include -lacml_mp ...

在configure.ac中,我输入了命令 AC_LIB_LINKFLAGS([acml_mp])我认为它只处理 -lacml_mp旗帜。

基本上,最终目标是让 autoconf 搜索这个库,并让 automake 生成的 makefile 在编译时包含正确的链接/包含路径。最后,手工编译的时候,总是需要修改环境变量 LD_LIBRARY_PATH使用命令
Export LD_LIBRARY_PATH=/opt/acml5.3.1/gfortran64_mp/lib:$LD_LIBRARY_PATH

理想情况下,我希望避免让用户这样做。抱歉,如果这些信息已经存在,我浏览了 SO 和 Google 几个小时无济于事。

最佳答案

搜索的问题在于 /opt/acml5.3.1/gfortran永远不会成为像 /usr/lib 这样的库(和标题)的标准(搜索)位置, /usr/local/lib等等。可能最好的办法是通过 --with-acml 明确提供这个位置。来配置。
AC_ARG_WITH宏描述here .假设 test "x$with_acml" != xno ,您可以尝试用 AC_LINK_IFELSE 链接程序.

AC_LANG_PUSH([C]) # or [Fortran]

ac_save_acml_CPPFLAGS="$CPPFLAGS" # or FCFLAGS instead of CPPFLAGS.
ac_save_acml_LIBS="$LIBS"

ac_acml_CPPFLAGS="-I${with_acml}/include"
ac_acml_LIBS="-L${with_acml}/libs -lacml_mp"

CPPFLAGS+="$ac_acml_CPPFLAGS"
LIBS+="$ac_acml_LIBS"

AC_LINK_IFELSE([AC_LANG_PROGRAM( ... some C or Fortran program ... )],,
AC_MSG_FAILURE([couldn't link with acml]))

AC_LANG_POP

# we *could* stop here... but we might need the original values later.

CPPFLAGS="$ac_save_acml_CPPFLAGS"
LIBS="$ac_save_acml_LIBS"

AC_SUBST(ACML_CPPFLAGS, $ac_acml_CPPFLAGS)
AC_SUBST(ACML_LIBFLAGS, $ac_acml_LIBS)

假设您已经使用 LT_INIT 初始化了 libtool 支持,您可以使用 $(ACML_LIBFLAGS) 添加 acml 库到您自己的图书馆 src/Makefile.am通过 LIBADD变量,或带有 LDADD 的可执行文件多变的。或 <lib>_la_LIBADD , <prog>_LDADD分别。

使用 $(ACML_CPPFLAGS) 编译源代码包含路径,将其添加到 AM_CPPFLAGS多变的。或者 <prog>_CPPFLAGS多变的。

在不知道您的 Makefile.am 的情况下很难具体说明已经设置。我知道这看起来很复杂 - 但最好在第一时间就做好基础设施。如果您有其他问题,我会添加到答案中。

关于linker - 链接共享库 Autotools,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18215304/

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