首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何链接到cppunit?

如何链接到cppunit?
EN

Stack Overflow用户
提问于 2012-04-19 11:00:44
回答 4查看 8.4K关注 0票数 5

我想我漏掉了一些非常愚蠢的东西。

我安装了libcppunit:(我使用的是Ubuntu 12.04)

代码语言:javascript
复制
$ apt-cache policy libcppunit-dev 
libcppunit-dev:
  Installed: 1.12.1-4
  Candidate: 1.12.1-4
  Version table:
 *** 1.12.1-4 0
        500 http://archive.ubuntu.com/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status

$ apt-cache policy libcppunit-1.12-1 
libcppunit-1.12-1:
  Installed: 1.12.1-4
  Candidate: 1.12.1-4
  Version table:
 *** 1.12.1-4 0
        500 http://archive.ubuntu.com/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status

我有一个简单的测试:

代码语言:javascript
复制
#include <iostream>

#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/TestFixture.h>
#include <cppunit/extensions/HelperMacros.h>

int main() {
    CppUnit::Test* suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();

    CppUnit::TextUi::TestRunner runner;
    runner.addTest(suite);
    runner.setOutputter(new CppUnit::CompilerOutputter(&runner.result(), std::cerr));

    return runner.run() ? 0 : 1;
}

这是编译器的输出:

代码语言:javascript
复制
$ g++ -lcppunit -o test.bin test.cpp 
/tmp/ccoQDuGC.o: In function `main':
test.cpp:(.text+0x36): undefined reference to `CppUnit::TestFactoryRegistry::getRegistry(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
test.cpp:(.text+0x75): undefined reference to `CppUnit::TextTestRunner::TextTestRunner(CppUnit::Outputter*)'
test.cpp:(.text+0x8b): undefined reference to `CppUnit::TestRunner::addTest(CppUnit::Test*)'
test.cpp:(.text+0x9a): undefined reference to `CppUnit::TextTestRunner::result() const'
test.cpp:(.text+0xe2): undefined reference to `CppUnit::CompilerOutputter::CompilerOutputter(CppUnit::TestResultCollector*, std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
test.cpp:(.text+0xf4): undefined reference to `CppUnit::TextTestRunner::setOutputter(CppUnit::Outputter*)'
test.cpp:(.text+0x150): undefined reference to `CppUnit::TextTestRunner::run(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, bool)'
test.cpp:(.text+0x189): undefined reference to `CppUnit::TextTestRunner::~TextTestRunner()'
test.cpp:(.text+0x227): undefined reference to `CppUnit::TextTestRunner::~TextTestRunner()'
collect2: ld returned 1 exit status

为了确保这些库确实存在于/usr/lib下

代码语言:javascript
复制
$ ls /usr/lib/ | grep cppunit
libcppunit-1.12.so.1
libcppunit-1.12.so.1.0.0
libcppunit.a
libcppunit.la
libcppunit.so

我遗漏了什么导致这种情况的原因?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-24 20:14:15

在告诉编译器要编译哪些文件之后,您必须告诉编译器要链接到哪些库。

代码语言:javascript
复制
g++ test.cpp -lcppunit -o test.bin 
票数 8
EN

Stack Overflow用户

发布于 2012-04-28 13:33:13

我遇到了同样的问题(使用Ubuntu 11.04)

这似乎是Ubuntu中的bug。你的变通方法"-Wl,--no- as -needed“适用于我,在链接的bug报告中也提到了一个变通方法。我还没有深入研究,找出真正的原因。

票数 1
EN

Stack Overflow用户

发布于 2012-06-19 18:42:43

我猜根本原因是cppunit文档教程文件"money_example.html“建议在Makefile.am中添加一行代码。

代码语言:javascript
复制
MoneyApp_LDFLAGS = $(CPPUNIT_LIBS) -ldl

而不是正确的

代码语言:javascript
复制
MoneyApp_LDADD = $(CPPUNIT_LIBS) -ldl

或者更正确的是

代码语言:javascript
复制
MoneyApp_LDADD = $(CPPUNIT_LIBS)

因为不管怎样,CPPUNIT_LIBS都引入了-ldlLDFLAGS在链接器可执行文件名称后面添加标志,LDADD在末尾添加标志,从而消除了原始post中的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10221075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档