首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与cppunit、cmake、ubuntu的连接错误

与cppunit、cmake、ubuntu的连接错误
EN

Stack Overflow用户
提问于 2014-10-28 21:47:47
回答 2查看 2.4K关注 0票数 0

我很抱歉,这可能是一个彻底的问题,但我正变得绝望。我试图让cppunit在Ubuntu上与KDe信封/CMake一起运行

我安装了libcppunit-dev:

代码语言:javascript
复制
markus@hp-notebook:~$ 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://at.archive.ubuntu.com/ubuntu/ precise/main i386 Packages
        100 /var/lib/dpkg/status

我的CMakeLists.txt看起来是这样的:

代码语言:javascript
复制
project(simpletest)

include_directories(/usr/local/include/)
link_directories(/usr/lib/)

add_executable(simpletest main.cpp)
LINK_LIBRARIES(simpletest cppunit)

我最简单的是:

代码语言: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++ simpletest.cpp -lcppunit -o simpletest.bin

所有的编译和链接都很好。但是,如果我使用CMake进行构建,就会得到链接器错误:

代码语言:javascript
复制
/home/markus/projects/simpletest/build> make
-- Configuring done
-- Generating done
-- Build files have been written to: /home/markus/projects/simpletest/build
Scanning dependencies of target simpletest
[100%] Building CXX object CMakeFiles/simpletest.dir/main.cpp.o
Linking CXX executable simpletest
CMakeFiles/simpletest.dir/main.cpp.o: In function `main':
/home/markus/projects/simpletest/main.cpp:9: undefined reference to `CppUnit::TestFactoryRegistry::getRegistry(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/markus/projects/simpletest/main.cpp:11: undefined reference to `CppUnit::TextTestRunner::TextTestRunner(CppUnit::Outputter*)'
/home/markus/projects/simpletest/main.cpp:12: undefined reference to `CppUnit::TestRunner::addTest(CppUnit::Test*)'
/home/markus/projects/simpletest/main.cpp:13: undefined reference to `CppUnit::TextTestRunner::result() const'
/home/markus/projects/simpletest/main.cpp:13: 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&)'
/home/markus/projects/simpletest/main.cpp:13: undefined reference to `CppUnit::TextTestRunner::setOutputter(CppUnit::Outputter*)'
/home/markus/projects/simpletest/main.cpp:15: undefined reference to `CppUnit::TextTestRunner::run(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, bool)'
/home/markus/projects/simpletest/main.cpp:15: undefined reference to `CppUnit::TextTestRunner::~TextTestRunner()'
/home/markus/projects/simpletest/main.cpp:15: undefined reference to `CppUnit::TextTestRunner::~TextTestRunner()'
collect2: ld returned 1 exit status
make[2]: *** [simpletest] Error 1
make[1]: *** [CMakeFiles/simpletest.dir/all] Error 2
make: *** [all] Error 2
*** Failed ***

因为它在直接调用g++时工作,所以我假设所有的库都在那里工作(没有编译器、hickup等等)。但问题在于我的CMake文件。-图书馆声明应该如何工作?例如,图书馆是名为libcppunit还是仅仅是cppunit。我想我只是在犯一些愚蠢的错误,但是任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-28 22:55:51

好吧我刚刚发现了错误。我用LINK_LIBRARIES代替target_link_libraries

这个CMakeLists.txt运行得很好:

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.8)
project(simpletest)

add_executable(simpletest main.cpp)
target_link_libraries  (simpletest cppunit)

@πάνταῥεῖ感谢您的出色链接

票数 1
EN

Stack Overflow用户

发布于 2014-11-04 07:38:22

Cpp.o:函数CppUnit::AutoRegisterSuite<canonunittest>::AutoRegisterSuite()': canonunittest.cpp:(.text._ZN7CppUnit17AutoRegisterSuiteI13canonunittestEC2Ev[_ZN7CppUnit17AutoRegisterSuiteI13canonunittestEC5Ev]+0x44): undefined reference toCppUnit::TestFactoryRegistry::getRegistry(stlp_std::basic_string,stlp_std::allocator > const&)‘CMakeFiles/test.dir/canonunittest.cpp.o:函数` `CppUnit::TestSuiteFactory::makeTest()':

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

https://stackoverflow.com/questions/26619095

复制
相关文章

相似问题

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