/usr/bin/ld:错误:找不到-lboost_unit_test_framework

2023-12-22

这个标题提出了很多问题,但我发现没有适合我的答案......

我有以下代码:

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

int add(int i, int j)
{
    return i + j;
}

BOOST_AUTO_TEST_CASE(universeInOrder)
{
    BOOST_CHECK(add(2, 2) == 4);
}

我编译:

g++ -ohello -lboost_unit_test_framework hello.cpp

我得到的错误:

g++ -ohello -lboost_unit_test_framework hello.cpp
/usr/bin/ld: error: cannot find -lboost_unit_test_framework
/tmp/ccI94F8l.o:hello.cpp:function init_unit_test(): error: undefined reference to 'boost::unit_test::framework::master_test_suite()'
/tmp/ccI94F8l.o:hello.cpp:function main: error: undefined reference to 'boost::unit_test::unit_test_main(bool (*)(), int, char**)'
/tmp/ccI94F8l.o:hello.cpp:function universeInOrder::test_method(): error: undefined reference to 'boost::unit_test::unit_test_log_t::set_checkpoint(boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::basic_cstring<char const>)'
/tmp/ccI94F8l.o:hello.cpp:function universeInOrder::test_method(): error: undefined reference to 'boost::test_tools::tt_detail::check_impl(boost::test_tools::predicate_result const&, boost::unit_test::lazy_ostream const&, boost::unit_test::basic_cstring<char const>, unsigned long, boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type, unsigned long, ...)'
/tmp/ccI94F8l.o:hello.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, unsigned long)'
/tmp/ccI94F8l.o:hello.cpp:function boost::unit_test::unit_test_log_t::unit_test_log_t(): error: undefined reference to 'vtable for boost::unit_test::unit_test_log_t'
/tmp/ccI94F8l.o:hello.cpp:function boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>): error: undefined reference to 'boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)'
/tmp/ccI94F8l.o:hello.cpp:function boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>): error: undefined reference to 'boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&)'
/tmp/ccI94F8l.o:hello.cpp:function boost::unit_test::unit_test_log_t::~unit_test_log_t(): error: undefined reference to 'vtable for boost::unit_test::unit_test_log_t'
collect2: ld returned 1 exit status

简单的例子来自http://www.alittlemadness.com/2009/03/31/c-unit-testing-with-boosttest/ http://www.alittlemadness.com/2009/03/31/c-unit-testing-with-boosttest/我在另一个大项目中也遇到了这个问题,该项目在其他机器上运行良好......我的机器配置一定有问题,但我不知道是什么(或如何调试它!)。

我已经做了一些事情:

检查libc.conf:

$ cat /etc/ld.so.conf.d/libc.conf
# libc default configuration
/usr/local/lib

检查用户是否可以读取 boost 文件:

$ test -r /usr/local/lib/libboost_unit_test_framework.a && echo ok
ok

$ ll /usr/local/lib/libboost_program_options.a
-rw-r--r-- 1 root root 1.2M May 22  2013 /usr/local/lib/libboost_program_options.a

运行 ldconfig?

sudo ldconfig

g++ -Wl,--verbose -o hello hello.cpp -lboost_unit_test_framework

/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o succeeded
/usr/bin/ld: Attempt to open /tmp/ccOe343V.o succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open /lib/x86_64-linux-gnu/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open /lib/x86_64-linux-gnu/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open /lib/../lib/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open /lib/../lib/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open /usr/lib/../lib/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open /usr/lib/../lib/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open //lib/x86_64-linux-gnu/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open //lib/x86_64-linux-gnu/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open //usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open //usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open //lib/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open //lib/libboost_unit_test_framework.a failed
/usr/bin/ld: Attempt to open //usr/lib/libboost_unit_test_framework.so failed
/usr/bin/ld: Attempt to open //usr/lib/libboost_unit_test_framework.a failed
/usr/bin/ld: error: cannot find -lboost_unit_test_framework
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libm.so failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libm.a failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libm.so succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.so failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libc.so failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libc.a failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libc.so succeeded
/usr/bin/ld: Attempt to open /lib/x86_64-linux-gnu/libc.so.6 succeeded
/usr/bin/ld: Attempt to open /usr/lib/x86_64-linux-gnu/libc_nonshared.a succeeded
/usr/bin/ld: Attempt to open /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so succeeded
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.so failed
/usr/bin/ld: Attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a succeeded
/tmp/ccOe343V.o:hello.cpp:function init_unit_test(): error: undefined reference to 'boost::unit_test::framework::master_test_suite()'
/tmp/ccOe343V.o:hello.cpp:function main: error: undefined reference to 'boost::unit_test::unit_test_main(bool (*)(), int, char**)'
/tmp/ccOe343V.o:hello.cpp:function universeInOrder::test_method(): error: undefined reference to 'boost::unit_test::unit_test_log_t::set_checkpoint(boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::basic_cstring<char const>)'
/tmp/ccOe343V.o:hello.cpp:function universeInOrder::test_method(): error: undefined reference to 'boost::test_tools::tt_detail::check_impl(boost::test_tools::predicate_result const&, boost::unit_test::lazy_ostream const&, boost::unit_test::basic_cstring<char const>, unsigned long, boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type, unsigned long, ...)'
/tmp/ccOe343V.o:hello.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, unsigned long)'
/tmp/ccOe343V.o:hello.cpp:function boost::unit_test::unit_test_log_t::unit_test_log_t(): error: undefined reference to 'vtable for boost::unit_test::unit_test_log_t'
/tmp/ccOe343V.o:hello.cpp:function boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>): error: undefined reference to 'boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)'
/tmp/ccOe343V.o:hello.cpp:function boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>): error: undefined reference to 'boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&)'
/tmp/ccOe343V.o:hello.cpp:function boost::unit_test::unit_test_log_t::~unit_test_log_t(): error: undefined reference to 'vtable for boost::unit_test::unit_test_log_t'
collect2: ld returned 1 exit status

我的机器配置一定有问题,但我不知道是什么(或如何调试它!)

Try,

g++ -Wl,--verbose -o hello hello.cpp -lboost_unit_test_framework

并查找以下行:尝试打开... boost_unit_test_framework。它将使您更好地了解链接器用来尝试定位有问题的静态或动态库的搜索路径。

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

/usr/bin/ld:错误:找不到-lboost_unit_test_framework 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐