我正在尝试在 MacOS 上构建一些使用 boost(特别是 boost_system)的软件。一切似乎都配置和构建正常,但是当它链接时它给出了错误:
ld: library 'boost_system' not found
查看 MacPorts 安装的 boost 库,它们似乎都有一个
-mt
后缀——我发现 /opt/local/lib/libboost_system-mt.dylib
。如果我将 Makefile.am 文件更改为使用 -lboost_system-mt
,那么一切都会正常,但当然这非常痛苦,并且会破坏任何其他构建。
有人知道这是怎么回事吗?这个
-mt
后缀从何而来?这是 MacPorts 的问题还是其他问题?
Boost 库文件名中的
-mt
后缀代表“多线程”(如本线程所示)。某些包管理器(包括 MacPorts)使用该命名约定来区分 Boost 库的单线程和多线程版本。
第一个选项:您可以将正确的库名称传递给构建配置脚本,而不是直接编辑 Makefile.am
。这通常是通过 LDFLAGS
或
LIBS
等标志完成的。
LDFLAGS="-lboost_system-mt" ./configure
或者:创建从 libboost_system.dylib
到 libboost_system-mt.dylib
的符号链接。这样,您的软件就可以在实际使用多线程变体时链接到
libboost_system
。
ln -s /opt/local/lib/libboost_system-mt.dylib /opt/local/lib/libboost_system.dylib