如何在 pkg-config 中使用 C++ Boost 库?

Posted

技术标签:

【中文标题】如何在 pkg-config 中使用 C++ Boost 库?【英文标题】:How to use C++ Boost library with pkg-config? 【发布时间】:2011-04-27 16:01:33 【问题描述】:

我成功编译并安装了最新版本的 Boost 库到我的 linux 机器上。 现在,我希望能够使用 pkg-config 来简化提供与 GCC 的链接参数的过程。

由于我懒得手动编写自己的 .pc 文件,是否有脚本/工具可以自动生成所需的 .pc 文件或以其他方式使用 boost 标志更新 pkg-config?

(如果有人已经拥有该 .pc 文件,也欢迎分享。)

【问题讨论】:

【参考方案1】:

您正在寻找的东西似乎有点复杂,并且是一个长期要求的功能,正如 Boost 的 trac 上这篇 3 年前的帖子 https://svn.boost.org/trac/boost/ticket/1094 中所指出的那样。通读它表明该功能被一再推迟并且从未实施(从 1.4.3 开始)。无法生成 pkg-config 可用的 .pc 文件的原因恰好与 boost 在命名其库版本/构建变体方面的不一致有关。

FWIW,“自动化”构建过程的另一种方法是使用自动工具(autoconf/automake)。有一个链接可能对您有用(我无法发布,因为 SO 认为我是垃圾邮件发送者而不是新来者!),只需谷歌“tsuna boost m4 github”,它应该带您到那里:)

【讨论】:

快 12 了。没有进展。【参考方案2】:

在使用 boost 时遇到了类似的问题。编写了简单的 python 脚本来生成一个 .pc 文件。省去了我编写所有链接器命令的痛苦。我已将其发布在https://github.com/nmante/pkg-config-generator。

本质上,您为脚本提供了一个库文件所在的目录(.so、.a、.dylib 文件),它将生成链接器命令(例如 -lboost_graph)。随意调整和分叉您的需求。

这是我为我的机器 (Mac OS X) 生成的示例 boost.pc 文件。您可以手动调整它,也可以使用我的github program 在您的机器上生成它。

# Package Information for pkg-config

prefix=/usr/local/Cellar/boost/1.60.0_2
exec_prefix=$prefix
libdir=$exec_prefix/lib
includedir_old=$prefix/include/boost
includedir_new=$prefix/include

Name: Boost
Description: Boost is awesome
Version: 1.60.0
Libs: -L$exec_prefix/lib  -lboost_prg_exec_monitor-mt 
-lboost_math_c99f-mt -lboost_unit_test_framework-mt 
-lboost_container-mt -lboost_log_setup -lboost_math_tr1l 
-lboost_graph-mt -lboost_wserialization-mt -lboost_log-mt 
-lboost_math_c99f -lboost_type_erasure -lboost_signals-mt 
-lboost_test_exec_monitor -lboost_filesystem -lboost_thread-mt 
-lboost_math_tr1f-mt -lboost_date_time -lboost_timer 
-lboost_math_tr1f -lboost_test_exec_monitor-mt -lboost_container 
-lboost_math_tr1 -lboost_type_erasure-mt 
-lboost_program_options-mt -lboost_graph -lboost_log_setup-mt 
-lboost_random -lboost_system -lboost_system-mt -lboost_locale-mt 
-lboost_wserialization -lboost_regex -lboost_exception 
-lboost_timer-mt -lboost_signals -lboost_filesystem-mt 
-lboost_math_c99-mt -lboost_math_tr1-mt -lboost_serialization-mt 
-lboost_serialization -lboost_prg_exec_monitor -lboost_exception-mt 
-lboost_coroutine -lboost_math_c99 -lboost_iostreams-mt 
-lboost_random-mt -lboost_program_options -lboost_atomic-mt 
-lboost_date_time-mt -lboost_math_c99l -lboost_math_tr1l-mt 
-lboost_context-mt -lboost_regex-mt -lboost_coroutine-mt 
-lboost_log -lboost_chrono-mt -lboost_wave-mt 
-lboost_iostreams -lboost_chrono -lboost_unit_test_framework 
-lboost_math_c99l-mt
Cflags: -I$includedir_old -I$includedir_new

【讨论】:

哇,然后人们开始问自己为什么链接变得如此缓慢。这真的应该分成多个 pkg-config 文件。 您将 .pc 文件放在哪里?应该为每个库都可用。例如pkg-config --libs boost_test boost_graph.

以上是关于如何在 pkg-config 中使用 C++ Boost 库?的主要内容,如果未能解决你的问题,请参考以下文章

C++学习(三四一)pkg-config

如何使用 pkg-config 在 Xcode 中设置包含路径?

如何使用以下make和pkg-config使clion工作?

如何在 C++ 语言中使用 Web API?

运行 C++ 代码时出现分段错误

如何将 pkg-config 名称映射到 yum/apt-get