如何在 autoconf 配置脚本/makefile 中添加到库的链接

发布于 2024-08-18 05:55:59 字数 307 浏览 6 评论 0原文

我是一个自动工具新手 我很难轻松地弄清楚如何做 将特定库链接到配置的目标之一。

我有一个源包,我想以通常的方式构建: ./配置&&制作&& make install

不幸的是,其中一个 cpp 缺少对另一个库的引用。 手动编译它(调整命令行)是可行的。但我宁愿 “修补”编译脚本。 编辑链接引用的标准位置在哪里?

 undefined reference to `boost::system::get_system_category()

顺便说一句,这是我的错误消息。

I am an autotools newb
and I have difficulties figuring out howto easily
link a specific library into one of the configured targets.

I have a source package that I want to build the usual way:
./configure && make && make install

Unfortunately one of the cpps has a missing reference to another library.
Compiling it by hand (adjusting the commandline) works. But I would rather
"patch" the compile script.
Where is the standard place to edit linking references?

 undefined reference to `boost::system::get_system_category()

That is my error message btw.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苍暮颜 2024-08-25 05:55:59

您需要在Makefile.am中的AM_LDFLAGS中添加相关的-l标志;例如:

AM_LDFLAGS = -lboost_system-mt

请注意,Boost 库通常以后缀结尾——表示构建配置的字母序列。在上面的例子中,后缀是-mt。这在您的安装中可能会有所不同(尽管 -mt 变体通常在 POSIXy 系统、IME 上可用)。

我做了这样的事情:

AM_LDFLAGS = -lboost_system$(BOOST_LIB_SUFFIX)

BOOST_LIB_SUFFIX 是一个珍贵的变量(请参阅AC_ARG_VAR),默认为-mt

You need to add the relevant -l flag to AM_LDFLAGS in Makefile.am; e.g.:

AM_LDFLAGS = -lboost_system-mt

Note that Boost libraries generally end in a suffix—a sequence of letters that indicates the build configuration. In the above example, the suffix is -mt. This could be different in your installation (though the -mt variant is commonly available on POSIXy systems, IME).

I do something like this:

AM_LDFLAGS = -lboost_system$(BOOST_LIB_SUFFIX)

BOOST_LIB_SUFFIX is a precious variable (see AC_ARG_VAR) that defaults to -mt.

薄情伤 2024-08-25 05:55:59

使用ax_cxx_check_lib.m4,因为boost_system没有任何可以使用AC_CHECK_LIB检查的外部“C”符号(未损坏的名称):

http://ac-archive.sourceforge.net/guidod/ax_cxx_check_lib.m4

下载上面的文件并将其命名 acinclude.m4,并将其放入项目根目录的 m4 文件夹中。

configure.ac 中:

AC_LANG_PUSH([C++])

AX_CXX_CHECK_LIB([boost_system-mt],[boost::system::generic_category()],[BOOST_LIB_SUFFIX="-mt"],[BOOST_LIB_SUFFIX=""])

AC_LANG_POP([C++])

AC_SUBST(BOOST_LIB_SUFFIX)

Makefile.am 中:

[artifact_name]_LDFLAGS = -lboost_system@BOOST_LIB_SUFFIX@

Use ax_cxx_check_lib.m4 because boost_system does not have any extern "C" symbols (unmangled names) that can be checked with AC_CHECK_LIB:

http://ac-archive.sourceforge.net/guidod/ax_cxx_check_lib.m4

Download the file above and name it acinclude.m4, and put it in the m4 folder in your project root.

In configure.ac:

AC_LANG_PUSH([C++])

AX_CXX_CHECK_LIB([boost_system-mt],[boost::system::generic_category()],[BOOST_LIB_SUFFIX="-mt"],[BOOST_LIB_SUFFIX=""])

AC_LANG_POP([C++])

AC_SUBST(BOOST_LIB_SUFFIX)

In Makefile.am:

[artifact_name]_LDFLAGS = -lboost_system@BOOST_LIB_SUFFIX@
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文