Boost 单元测试链接错误——abi 不匹配?

2024-04-12

我正在尝试使用 boost 构建一个单元测试,但链接器抱怨缺少函数。拿这个骨架代码

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(TestFuncOps);

BOOST_AUTO_TEST_CASE(CopyConstructor)
{
}    

BOOST_AUTO_TEST_SUITE_END();

但它失败了

Undefined symbols for architecture x86_64:
  "boost::unit_test::ut_detail::normalize_test_case_name[abi:cxx11](boost::unit_test::basic_cstring<char const>)", referenced from:
      __GLOBAL__sub_I_funcopstest.cc in funcopstest.o

The libboost_unit_test_framework通过我的链接器命令找到:

g++-5 --std=c++14 funcopstest.o -L/usr/local/lib -lboost_unit_test_framework -o test_funcops

因为当拿走-lboost_unit_test_framework,我得到了大量未定义的引用,而不是只有一个。 Boost是通过安装的brew使用 c++11 模式从源代码开始。我尝试编译每个-fabi-version=[0-8]但一切都没有改变。

有人知道发生了什么事吗?


Add -D_GLIBCXX_USE_CXX11_ABI=0给你的CPPFLAGS,然后重新编译。

gcc 5 附带的 libstdc++ 必须进行一些更改std::string and std::list为了与 C++11 保持一致。为了向后兼容,它支持dual ABI https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html,但它默认使用新的 ABI。

您的 libboost_unit_test_framework.so 似乎是在不支持新框架的情况下编译的(可能使用 gcc 4.x),因此当您编译代码时,编译器将生成期望与支持新框架的库链接的代码。如果两个 ABI 不同,符号将会丢失。定义_GLIBCXX_USE_CXX11_ABI宏到0使 gcc 5 使用旧的库代码。

或者,您可以使用 gcc 5 重建 Boost.Test。

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

Boost 单元测试链接错误——abi 不匹配? 的相关文章

随机推荐

  • Resharper 中的重新排列代码快捷方式在 VS2015 中不起作用

    When I try to use the shortcut for moving lines up down Ctrl Alt Shift it highlights the code and shows the tooltip mess
  • 在 VB6 中什么时候必须将变量设置为“Nothing”?

    在我的一个 VB6 表单中 我创建了几个其他 Form 对象并将它们存储在成员变量中 Private m frm1 as MyForm Private m frm2 as MyForm Later Set m frm1 New MyForm
  • 如何一次“vagrant up”多个节点?

    我有一个定义了多个节点的 Vagrantfile 比如节点1 节点2 节点3 我想运行一个命令 vagrant up provision node1 node2 但这似乎在一个命令行中不可能 唯一的方法似乎是并行运行两个命令 vagrant
  • 多线程时 For 循环索引超出范围 ArgumentOutOfRangeException

    当我迭代时 我遇到了一些奇怪的行为dummyText List in the ThreadTest方法我得到索引超出范围异常 ArgumentOutOfRangeException 但是如果我删除线程并且只打印出文本 那么一切都会正常 这是
  • Azure 文件存储 SMB 列出目录中的文件速度很慢

    我们有一个通过 Azure 文件列出文件夹中文件的应用程序 当我们使用C 方法时 Directory GetFiles account file core windows net xyz 当有 2000 个文件时 大约需要一分钟 如果我们使
  • MPMoviePlayerController 取消全屏模式在 iOS 6 中不起作用

    The MPMoviePlayerController在装有 iOS 5 的 iPad 上运行良好 最初视频通过添加MPMoviePlayerController到某个帧的自身子视图 按全屏按钮MPMoviePlayerController
  • 如何记录 REST API?

    如何记录 REST API 不仅仅是资源的文档 而且实际上是请求中发送的数据是什么以及响应中发回的数据是什么 知道某些东西期望发送 XML 并返回 XML 是不够有用的 或 JASN 管他呢 如何记录请求中发送的数据和响应中发回的数据 到目
  • Realm Swift:如何捕获 RLMException?

    我以为我做得正确 let realm try Realm do try realm write realm add myObject catch print something went wrong 但我仍然遇到崩溃而不是打印语句 我对避免
  • 我怎样才能有不同的提交来进行合并和冲突解决

    我将开发分支合并到我的功能分支中 这导致在解决我提交和推送的分支后出现合并冲突 现在的问题是合并和冲突解决更改位于一次提交中 很难找到解决冲突的方法 当存在合并冲突时 如何才能有两个单独的提交 一个用于合并 另一个用于冲突修复 如果你真的想
  • Angularjs 未捕获错误:[$injector:unpr]

    我正在用java开发购物网站 我正在使用angularjs 我对这些文件有问题 DashboardControll js use strict var app angular module DashboardApp app controll
  • MLlib MatrixFactorizationModel suggestProducts(user, num) 在某些用户上失败

    我训练了一个MatrixFactorizationModel https spark apache org docs 1 3 0 api java org apache spark mllib recommendation MatrixFa
  • 在 JPA 查询中转义冒号字符“:”

    我正在尝试通过使用 字符的 JPA 运行本机查询 特定实例在查询中使用 MySQL 用户变量 SELECT foo bar baz rownum if id foo rownum 1 1 as rownum id foo as rep id
  • 在 View AngularJS 中使用服务

    我对 angularJS 服务有疑问 我有简单的服务 angular module mainApp services factory AuthService function http var currentUser null var au
  • 删除过多的 try-catch 块

    我正在重构一个由其他开发人员编写的中型 WinForms 应用程序 几乎每个类的每个方法都被一个try catch堵塞 99 的情况下 这些 catch 块仅记录异常或清理资源并返回错误状态 我认为很明显这个应用程序缺乏适当的异常处理机制
  • 以逗号分隔的标签输入字段

    我正在开发一个网络应用程序 允许用户通过标签发布内容 但问题是 如果标签被comma并且文本字段值仍然相同 只是用户的视图会有所不同 一个例子是 YouTube 或 StackOverflow 目前我不需要它来检查数据库或任何东西 Than
  • Java 8 从 Map 中的匹配值中提取所有键

    我对 Java8 比较陌生 我有一个场景 我需要从 Map 中检索与对象匹配的所有键 想知道是否有一种方法可以获取所有键而无需再次从列表中迭代它们 Person java private String firstName private S
  • 如何在 Android 上使用 GraphQL 和 Retrofit?

    我是 GraphQL 的新手 但我已经使用 Retrofit 一段时间了 它易于使用且快速 GraphQL 在传递数据的方式方面与 REST API 有很大不同 关于在 Android 上使用 GraphQL 的教程确实不多 我只能找到这个
  • 使用 numpy.genfromtxt 填充缺失值

    尽管前面的问题提出了建议 9999 作为 numpy genfromtxt 的缺失值 https stackoverflow com questions 12274709 9999 as missing value with numpy g
  • 将默认值传递给表值参数 - SQL Server

    我在我们的一个存储过程中使用表值参数 这是我使用的语法 districtlist NumericList readonly NumericList是用户定义的表类型 但是 根据要求 我需要将默认值传递给该表值参数 districtlist
  • Boost 单元测试链接错误——abi 不匹配?

    我正在尝试使用 boost 构建一个单元测试 但链接器抱怨缺少函数 拿这个骨架代码 define BOOST TEST DYN LINK define BOOST TEST MAIN include