体系结构 x86_64 的未定义符号:OS X、Boost Log、CMake

2023-12-22

链接的另一个问题

操作系统 X 10.9.5 x64

跨平台项目正在使用 CMake 工具链构建。使用升压。

将所有可执行文件与 Boost Log 链接时出错(确实找到了 BOOST_PATH,单元测试与 Boost Test 成功链接)

第一次尝试。使用铿锵

gcc -v
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

建筑提升

./bootstrap &&  ./b2 threading=multi link=static runtime-link=static install

成功完成

...updated 638 targets...

链接说明:

if( ("UNIX") AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") )

    # using Clang
    message("UNIX configuration, Clang")
    set(CMAKE_CXX_FLAGS "-std=c++11")
    set(CMAKE_EXE_LINKER_FLAGS "-std=c++11 -Wl")

将库链接到可执行文件

add_executable(${TARGET} ${SOURCES})
if( ("UNIX") AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") )

    # using Clang
    message("UNIX configuration, Clang")
    target_link_libraries(${TARGET}
        libhelpers.a
        libopenvpn_manager.a
        ${Boost_LOG_LIBRARY}
        ${Boost_LOG_SETUP_LIBRARY}
        ${Boost_SYSTEM_LIBRARY}
        ${Boost_FILESYSTEM_LIBRARY})

生成 makefile:

cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++exit .

链接器输出(选择了一些行):

Undefined symbols for architecture x86_64:
 "boost::detail::get_tss_data(void const*)", referenced from:
      boost::log::v2s_mt_posix::core::add_thread_attribute(boost::log::v2s_mt_posix::attribute_name const&, boost::log::v2s_mt_posix::attribute const&) in libboost_log.a(core.o)
      boost::log::v2s_mt_posix::core::remove_thread_attribute(boost::log::v2s_mt_posix::attribute_set::iter<false>) in libboost_log.a(core.o)
      boost::log::v2s_mt_posix::core::get_thread_attributes() const in libboost_log.a(core.o)
      ...
  "boost::detail::set_tss_data(void const*, boost::shared_ptr<boost::detail::tss_cleanup_function>, void*, bool)", referenced from:
      boost::thread_specific_ptr<boost::log::v2s_mt_posix::core::implementation::thread_data>::reset(boost::log::v2s_mt_posix::core::implementation::thread_data*) in libboost_log.a(core.o)

      ...
  "boost::detail::thread_data_base::~thread_data_base()", referenced from:
      boost::detail::thread_data<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > >::~thread_data() in openvpn_test_app.cpp.o

…
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

第二次尝试。使用海湾合作委员会

我如何将其设为默认值

#!/bin/bash
cd /usr/bin
rm cc gcc c++ g++
ln -s /usr/local/bin/gcc-4.9 cc
ln -s /usr/local/bin/gcc-4.9 gcc
ln -s /usr/local/bin/c++-4.9 c++
ln -s /usr/local/bin/g++-4.9 g++

gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/4.9.1/libexec/gcc/x86_64-apple-darwin13.2.0/4.9.1/lto-wrapper
Target: x86_64-apple-darwin13.2.0
Configured with: ../configure --build=x86_64-apple-darwin13.2.0 --prefix=/usr/local/Cellar/gcc/4.9.1 --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-4.9 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-cloog=/usr/local/opt/cloog --with-isl=/usr/local/opt/isl --with-system-zlib --enable-version-specific-runtime-libs --enable-libstdcxx-time=yes --enable-stage1-checking --enable-checking=release --enable-lto --disable-werror --with-pkgversion='Homebrew gcc 4.9.1' --with-bugurl=https://github.com/Homebrew/homebrew/issues --enable-plugin --disable-nls --enable-multilib
Thread model: posix
gcc version 4.9.1 (Homebrew gcc 4.9.1)

以与之前相同的方式构建 Boost

链接说明

elseif( ("UNIX") AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") )

    # using GCC
    message("UNIX congiguration, GCC")
    set(CMAKE_CXX_FLAGS "-std=c++11 -pthread")
    set(CMAKE_EXE_LINKER_FLAGS "-std=c++11 -pthread")

将库链接到可执行文件的方式与 Clang 相同

target_link_libraries(${TARGET}
    libhelpers.a
    libopenvpn_manager.a
    ${Boost_LOG_LIBRARY}
    ${Boost_LOG_SETUP_LIBRARY}
    ${Boost_SYSTEM_LIBRARY}
    ${Boost_FILESYSTEM_LIBRARY})

生成 makefile

cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ .

链接器输出:

Undefined symbols for architecture x86_64:
"boost::detail::get_tss_data(void const*)", referenced from:
      boost::log::v2s_mt_posix::core::set_thread_attributes(boost::log::v2s_mt_posix::attribute_set const&) in libboost_log.a(core.o)
boost::log::v2s_mt_posix::core::get_thread_attributes() const in libboost_log.a(core.o)
      boost::log::v2s_mt_posix::core::remove_thread_attribute(boost::log::v2s_mt_posix::attribute_set::iter<false>) in libboost_log.a(core.o)
…
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

您缺少的符号来自 Boost.Thread,它由 Boost.Log 在多线程配置中使用。您需要将“thread”组件添加到 find_package 行,并将 Boost_THREAD_LIBRARY 变量添加到 target_link_libraries 行。请注意,您可能需要确保 target_link_libraries 行中库的顺序正确,以避免由符号依赖项解析顺序引起的链接错误(应最后指定叶依赖项)。例如:

find_package(Boost COMPONENTS log log_setup thread filesystem system)
target_link_libraries(${TARGET}
    ${Boost_LOG_SETUP_LIBRARY}
    ${Boost_LOG_LIBRARY}
    ${Boost_FILESYSTEM_LIBRARY}
    ${Boost_THREAD_LIBRARY}
    ${Boost_SYSTEM_LIBRARY}
)

根据您使用的功能,您可能需要类似地添加与 Boost.Regex 和 Boost.DateTime 的链接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

体系结构 x86_64 的未定义符号:OS X、Boost Log、CMake 的相关文章

  • 如何在 ASP.Net Core 6 Web Api 中依赖注入 Microsoft Graph 客户端

    我正在尝试使用 ASP Net Core 6 设置 Web api 以便用户可以到达我的端点 然后我使用特权帐户在 Teams 中执行一些工作 我认为我没有正确连接 DI 部分 因为在向 Teams 发出请求时出现以下错误 MsalUiRe
  • 在 TPL Dataflow 中,是否可以在创建块之后但使用之前更改 DataflowBlockOptions?

    有效果吗 我想推迟设置 ExecutionDataflowBlockOptions SingleProducerConstrained 属性 直到我准备好将网络链接在一起 因为 我想将创建块及其语义与将网络及其语义链接在一起分开 但据我所知
  • 不要覆盖 Azure Blob 存储

    我有一种将文件添加到 Azure Blob 存储的方法 问题是我试图指定一个条件 在该条件下它不会覆盖 blob 而只是添加到其中 我正在尝试使用参数访问条件 但是 VS 说这个方法不能采用两个参数 async void archiveNe
  • 有什么办法可以让这个 C# 代码更快吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在读取一个大文件 X12 并解析其中的信息 我有两个瓶颈功能 我似乎无法解决 read line 和 get element 有什
  • 缓存友好的矩阵移位功能

    我想将二维方阵的第一行移到最后一行 所以如果我有一个像A这样的矩阵 我想要得到B 我可以使用两个简单的 for 循环来做到这一点 例如 void shift int M int N int A M N int i j temp for i
  • 使用 C# 启动 Outlook

    我可以让 C 在代码中启动 Outlook 吗 在 VB6 中 我们使用对象 Outlook Application 并编写 Set oOutlook CreateObject Outlook Application Set oNameSp
  • std::string substr 方法问题

    你好 我正在写这个方法 我希望它从给定缓冲区中提取给定位置的一部分 我有一个像这样的字符串something one something two我想要得到 一个 这是我的想法 static std string Utils getHeade
  • std::istringstream >> 使奇怪的行为加倍

    下面的代码打印0在 mac osx 上使用 clang 其他地方都会打印5 clang https ideone com mVgpzS gcc https ideone com oZ0hy6 include
  • 隐式转换和编译器的不同行为

    Motivated by this question https stackoverflow com q 51972738 5800831 I created the following code struct X X int struct
  • 不使用 DAO 压缩 Microsoft Access 数据库

    我用CDatabase类开一个ACCDB访问数据库 司机是 T Microsoft Access Driver mdb accdb 我可以打开并使用数据库 已经这样做很多年了 if DatabaseExist m strMDBPath AJ
  • 安全移动 C++ 对象

    我听到过一些警告 不要通过以下方式将对象运送到另一个内存位置memcpy 但不知道具体原因 除非它包含的成员做了依赖于内存位置的棘手事情 否则这应该是完全安全的 或者不是 编辑 预期的用例是像这样的数据结构vector 它存储对象 不是po
  • autofac 中的条件组件注册

    是否可以根据其他组件的状态有条件地注册组件 就像是 ContainerBuilder RegisterConditionally
  • 如何检查我的程序是否有数据通过管道传输到其中

    我正在编写一个应该通过标准输入读取输入的程序 所以我有以下结构 FILE fp stdin 但是 如果用户没有将任何内容通过管道传输到程序中 这就会挂起 我如何检查用户是否确实将数据通过管道传输到我的程序中 例如 gunzip c file
  • 使用 itextSharp 5.3.3 对 Pdf 文档进行数字签名和验证

    我正在尝试使用 iTextSharp 5 3 3 在服务器 c 上进行数字签名和验证 pdf 文档 我使用 DigiSign 在线工具 生成了 Pfx 文件 然后使用 Windows 生成证书 cer 文件
  • 通用 lambda 的数量

    可以通过访问非泛型 lambda 的数量来推断其数量operator template
  • 使用智能指针在大型对象集合中创建多个索引

    我正在为一个大型对象集合创建多个索引 即使用不同的键 对象可以改变 集合可以缩小和增长 到目前为止我的想法 保留某种指向对象的指针的多个集合 使用set代替map以获得更好的封装 使用 unordered set 可以很好地扩展大型数据集
  • 我的 C 程序无法运行,并显示“无法执行二进制文件:Exec 格式错误”

    我刚刚从 C 开始 我试图编译下面的代码并执行它 但出现错误 也在运行sizeBS 或数据堆栈中没有显示任何内容 include
  • TransactionScope 在某些机器上自动升级到 MSDTC?

    在我们的项目中 我们使用 TransactionScope 来确保我们的数据访问层在事务中执行其操作 我们的目标是not要求在我们的最终用户的计算机上启用 MSDTC 服务 问题是 在我们一半的开发人员机器上 我们可以在禁用 MSDTC 的
  • 编写一个转储屏幕像素的 RDP 客户端

    我想在中实现 RDP 客户端C 它能够获取屏幕所有像素的颜色值并将它们转储到文件中 我知道这在概念上与 RDP 的工作方式不同 但我的应用程序需要它 我正在尝试利用freerdp https github com FreeRDP FreeR
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参

随机推荐

  • 从 lxml 获取内部文本

    lxml html fromstring 坚持将所有内容包装在标签中 p默认 从这个标签树来看 p this is b the b good stuff p p 我想提取字符串 this is b the b good stuff 我该怎么
  • 在 Javascript (Meteor) 中将字符串转换为 Mongo ObjectID

    我有一个 Meteor 应用程序 最初我使用 id在我的模板中命名列表项时 我的集合中每条记录的字段 当得到 id字段 我将其转换为字符串以在模板中使用 现在我想更新 Mongo 中的这些记录并传递 id回到一个Meteor method
  • 获取本地文件的内容而不上传[重复]

    这个问题在这里已经有答案了 我正在编写一个离线网络应用程序 允许用户选择本地文件 修改它 然后也在本地保存副本 是否可以在没有任何服务器的情况下 我可以上传文件并返回其base64 但它不是离线的 应用程序只需要在 Google Chrom
  • 使用 Nginx 在单个域上运行多个 React 应用程序

    谁能推荐一个最佳实践 nginx 配置来在单个域上运行多个 React 应用程序 这些应用程序将从不同的根目录提供服务 因此 app1 和 app2 在 www domain com 上运行并获得服务 www domain com app1
  • 如何查看查询执行成功与否?

    我正在使用 codeigniter 2 0 2 这是来自它的用户指南 data array title gt title name gt name date gt date this gt db gt where id id this gt
  • SQL 中的循环行

    我正在寻找类似的输出 最近 日期 评论 第二个最近 日期 评论 Example Book Comments BookA 27 03 13 comment1 21 03 13 comment2 21 03 13 uhuuuu and so o
  • 基于数量的价格计算器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建一个简单的脚本来添加到我的 html 网站 我需要它根据用户输入的数量计算价格 例如 1 1000 的值将乘以 1 50 并
  • Flex 4 组显示效果/隐藏效果

    我有一个组 我想在显示和隐藏时执行擦除效果
  • Drupal 7 在“首次加载”时太慢

    我希望有人能帮助我解决这个 Drupal 7 问题 我注意到 当我 第一次 输入网站地址时 加载时间非常慢 开始加载文件和显示内容大约需要 20 平均 秒 好像有一些延迟 然而 在那段时间之后 速度非常快 一切都很好 页面加载后 我们可以快
  • 在 NLTK 解析器中使用整数/日期作为终端

    我正在尝试使用 NLTK 中的 Earley 解析器来解析句子 例如 如果日期早于 12 21 2010 则序列号 10 为此 我尝试编写一个 CFG 但问题是我需要使用日期和整数的通用格式作为终端 而不是特定值 有没有什么方法可以将生产规
  • 列出SD卡中的所有图像

    您好 我正在开发 Android Gallery 应用程序 我正在从 SD 卡中的文件夹中获取图像并将其显示在网格视图上 如下所示 public static ArrayList
  • Linq - 如何在变量中存储“where条件”

    是否可以将此 linq 语句中的Where条件存储在变量中 Func
  • 使用 z-index 覆盖 DIV

    我试图在整个页面上覆盖一个 div 以显示弹出窗口 问题是 它不会覆盖整个页面 这是代码的近似值 div div style width 100 height 100 Overlay div Contents of container 1
  • angularjs 按顺序链 http post

    在我的应用程序中 我将数据存储在本地存储中并在后台触发异步 http post 成功发布后 发布的数据将从本地存储中删除 当 http post 正在进行时 可能会有更多数据添加到本地存储中 因此我需要将 post 排队并按顺序处理它 因为
  • 在 ABPeoplePickerNavigationController 上取消选择RowAtIndexPath

    我在我的应用程序中将 ABPeoplePickerNavigationController 显示为选项卡 用户单击姓名 然后单击电子邮件地址 然后我对电子邮件地址执行某些操作 之后 我希望他们选择的人和财产淡出 不突出显示 在普通表中 我会
  • getOutputStream() 上的设备上“没有到主机的路由” - 无线连接

    private String urlPost http 192 168 1 66 8080 DataCollectionServlet Override protected void doWakefulWork Intent intent
  • 使用泛型类型构造函数时,Null (?) 运算符返回不正确的值。网络

    使用通用类型和空运算符时 我遇到一些奇怪的行为 为什么 obj2 CurrentDate 返回的日期值在使用时看起来不正确 简写 如果我在属性中长期使用 null 运算符 if 那么它会返回正确的预期值 我以为 相当于 if 表达式 ret
  • 配置 Kafka 以接受来自 Docker 内部和外部的客户端

    我正在 Docker 网络中运行 Apache Kafka Kafka Broker 的容器称为 docker kafka 我想要的是允许来自另一个 docker 容器以及 docker 主机的 Kafka 客户端的连接 docker ka
  • 复制关系表数据

    我希望我在这个问题上不会太啰嗦 我只是想确保我所问的内容完全清楚 我认为这相当令人困惑 我有一个数据库 其中有一堆表 并且设置了所有外键约束 关系有时会深达几张表 并且也存在子级与多个父表相关的情况 我想插入 顶级 表行之一的副本以及与其相
  • 体系结构 x86_64 的未定义符号:OS X、Boost Log、CMake

    链接的另一个问题 操作系统 X 10 9 5 x64 跨平台项目正在使用 CMake 工具链构建 使用升压 将所有可执行文件与 Boost Log 链接时出错 确实找到了 BOOST PATH 单元测试与 Boost Test 成功链接 第