在命令行上编译c ++ boost test程序

时间:2014-10-01 14:27:34

标签: 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;
}

bob.h:

#include <string>

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

使用'clang ++ bob.cpp'在终端中编译并使用./a.out运行。使用以下链接写了一个加强测试: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上使用Xcode 6.0.1,通过macports安装了1.56。尝试使用相同Xcode的小牛队并提升1.55但结果相同。

通过更改传递给链接器的参数使其正常工作

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

并提供图书馆的完整路径。

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

-std=c++11

1 个答案:

答案 0 :(得分:2)

您忘记了图书馆路径:

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

修复后出现的链接错误表明您没有main()功能 - 如果您拥有所有必要的样板,似乎boost单元测试框架将为您生成 - 请参阅{{3有关详细信息,但看起来您可能需要:

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

而不是:

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