链接到 MacOS 上预编译的 QuantLib 二进制文件时未定义的 Boost 符号

菲利普·梅班克

我正在尝试编译一些依赖于 QuantLib 的 C++,而后者又依赖于 Boost。我正在使用 MacBook Pro M1(ARM 架构)。我使用此页面上的说明安装了 Boost 和 QuantLib:https : //www.quantlib.org/install/macosx.shtml然后我尝试编译以下源代码:

#include <iostream>
#include <ql/quantlib.hpp>
 
int main(int, char*[])
{
    QuantLib::Option::Type OptionType(QuantLib::Option::Call);
    std::cout << "Option Type = " << OptionType << std::endl;
    
    return 0;
}

使用以下命令:

clang++ -std=c++11 ql_ex1.cpp -o build/ql_ex1 $(INC) $(LIB) \
    -I/opt/homebrew/Cellar/quantlib/1.23/include -I/opt/homebrew/Cellar/boost/1.76.0/include \
    -L/opt/homebrew/Cellar/boost/1.76.0/lib -L/opt/homebrew/Cellar/quantlib/1.23/lib

这给了我以下错误消息:

Undefined symbols for architecture arm64:
  "boost::assertion_failed(char const*, char const*, char const*, long)", referenced from:
      long double boost::math::detail::sinpx<long double>(long double) in ql_ex1-044d3e.o
  "boost::assertion_failed_msg(char const*, char const*, char const*, char const*, long)", referenced from:
      boost::array<long double, 171ul>::operator[](unsigned long) const in ql_ex1-044d3e.o
...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1

到目前为止,我已经尝试了以下方法,

  • 安装 x86 二进制文件并clang++在仿真中运行我看到相同的未定义符号错误。
  • 尝试确定我需要链接到的 Boost 共享库文件。我找不到任何包含该assertion_failed符号的内容。

有人可以指出我在哪里(如果有的话)这个符号的定义?知道我是否只是缺少正确的编译器选项或者是否有更基本的问题需要解决会很有用。

路易吉·巴拉比奥

我认为您-lQuantLib在命令行中缺少一个您告诉编译器在哪里查找库(-L开关),而不是要链接哪些库。

另外,检查自制软件是否还在quantlib-config您的计算机上安装了脚本。如果是这样,它应该提供您需要的开关;尝试跑步

quantlib-config --cflags

它应该输出-I指定 QuantLib 标头位置标志(也可能是-std=c++11您手动传递标志),以及

quantlib-config --libs

它应该输出相应的-L开关以及-lQuantLib您错过的开关

如果它们有效,您可以使用命令

clang++ ql_ex1.cpp -o build/ql_ex1 $(INC) $(LIB) \
-I/opt/homebrew/Cellar/boost/1.76.0/include \
`quantlib-config --cflags` `quantlib-config --libs`

并让脚本为您填写信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

g++ 编译:我可以链接到带有符号链接二进制文件的目录吗?

在macOS上找不到体系结构的Boost :: Log符号

在macOS 10.12 Sierra上安装QuantLib

创建符号二进制链接时出错

使用whereis找到符号链接的二进制文件

用外部符号替换MacOS Mach-O二进制文件中的静态符号

链接器错误-带有libboost_thread的macOS上未定义的符号std :: string :: c_str()const?

VS 编译的二进制文件中的符号

如何知道链接到二进制可执行文件的调试符号文件的名称和/或路径?

符号链接会发生什么?原始二进制文件和符号二进制文件的行为不同

将库链接到可执行文件时诊断未定义符号

在OSX上链接到iOS模拟器二进制文件

在Linux和MacOS上的readlink选项,如果不是符号链接,它将返回文件路径

FFMPEG二进制文件引发错误:体系结构x86_64的未定义符号

链接到DLL文件中的Boost

链接到 Filament 预编译库时出现链接器错误

将Boost与cmake和clang链接-未定义对符号的引用

链接二进制文件和符号链接之间有什么关系?

使用Boost / Python的未定义符号

从命令行(macOS)进行编译时,将SDK版本写入二进制文件

符号链接:查找链接到该文件的所有文件

如何在Unix / Linux上跟随多个符号链接到原始文件?

Dpkg Debuild dh_helper:如何将/ opt / package中安装的二进制文件符号链接到/ usr / local / bin?

使用boost文件系统查找圆形符号链接

如何从 AWS Lambda 上的预编译二进制文件导入 lxml?

鱼壳,$ PATH和符号链接的二进制文件

从源代码构建python而不为二进制文件创建符号链接

静态链接的二进制文件中缺少调试符号

二进制文件因为无效的符号链接而被拒绝,有什么想法吗?