c++ - 在命令行编译c++ boost测试程序

标签 c++ xcode boost clang++

我已经在 exercism.io 注册了一个帐户,并且正在处理 C++ 测试用例。为了尝试进行 boost 测试,我创建了这个简单的 bob.cpp 程序:

#include "bob.h"
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char const *argv[]) {
    string s = bob::hey("Claus");
    cout << s << endl;
    return 0;
}

鲍勃.h:

#include <string>

namespace bob {
    std::string hey(std::string s) {
        return "Hello " + s;
    }
}

在终端中使用“clang++ bob.cpp”进行编译并使用 ./a.out 运行。使用此链接编写了 boost 测试:c++ Using boost test

bob_test.cpp:

#include "bob.h"
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(greeting) {
    BOOST_CHECK_EQUAL("Hello Claus", bob::hey("Claus"));
}

但是当我尝试使用编译它时

~/devel/cpp/boost%>clang++ -I /opt/local/include -l boost_unit_test_framework bob_test.cpp 
ld: library not found for -lboost_unit_test_framework
clang: error: linker command failed with exit code 1 (use -v to see invocation)

问候 克劳斯

这是在 Yosemite 上通过 macports 安装了 Xcode 6.0.1、boost 1.56。在具有相同 Xcode 和 boost 1.55 的 Mavericks 上尝试过,但结果相同。

我通过更改传递给链接器的参数让它工作:

clang++ -I /opt/local/include -Wl,/opt/local/lib/libboost_unit_test_framework.a bob_test.cpp
                              ^^^^

并提供库的完整路径。

要启用 c++11 功能,请添加以下内容:

-std=c++11

最佳答案

您忘记了库路径:

$ clang++ -I /opt/local/include -L /opt/local/lib -l boost_unit_test_framework bob_test.cpp
                                ^^^^^^^^^^^^^^^^^

修复此问题后出现的链接错误表明您没有 main() 函数 - 似乎 boost 单元测试框架将为您生成此错误,前提是您已准备好所有必要的样板文件- 参见http://www.boost.org/doc/libs/1_40_0/libs/test/doc/html/utf/user-guide/test-organization/auto-test-suite.html了解详细信息,但看起来您可能需要:

#define BOOST_AUTO_TEST_MAIN
#include <boost/test/auto_unit_test.hpp>

而不是:

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

关于c++ - 在命令行编译c++ boost测试程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26143727/

相关文章:

c++ - 想要销毁我制作的堆栈

objective-c - 在后台做一些事情,一旦完成,在前台做其他事情吗?

xcode - OCLint 生成空的compile_commands.json

boost - 通过 boost::interprocess::message_queue 传递指针

c++ - 将 Boost 添加到 CMake 项目?

c++ - 使用容器解析为结构

c++ - 重载新建和删除与自定义分配器

c++ - 混淆定义静态 C++ 模板类成员

c++ - "decay"模板别名

xcode - 如何为 Mac App Store 协同设计框架包?