2014-10-28 2 views
0

죄송합니다. 아마도 멍청한 질문 이었지만 필사적입니다.cppunit, cmake, 우분투로 연결 오류가 발생했습니다.

[email protected]:~$ 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은 다음과 같습니다 : 나는 libcppunit-dev에 설치

우분투

에 KDevelop/CMake 실행 CppUnit을 얻을하려고

project(simpletest) 

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

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

이처럼 내 simpletest :

#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; 
} 

나는 간단하게 할 경우

g++ simpletest.cpp -lcppunit -o simpletest.bin 

모든 것이 잘 컴파일되고 링크됩니다. 내가 CMake를 사용하여 빌드하지만 내가 링커 오류를 얻을 : 그 작업 이후

/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 *** 

그램를 호출 할 때 직접 내가 모든 라이브러리가와 (어떤 컴파일러 hickup 등) 작업을하지 않는다고하지만 문제가 함께 있다고 가정 ++ 내 CMake 파일. - 라이브러리 선언은 어떻게 작동합니까? 예 : libcppunit 또는 cppunit라고하는 라이브러리입니다. 나는 그저 바보 같은 실수를 저지르고 있다고 가정하지만, 어떤 도움을 주시면 감사하겠습니다.

+1

[** 정의되지 않은 참조/확인되지 않은 외부 기호 오류 란 무엇이며 어떻게 해결할 수 있습니까? **] (http://stackoverflow.com/questions/)에서이 오류의 가능한 모든 이유를 이미 확인했습니다. 12573816/what-is-undefined-reference-unresolved-external-symbol-error-and-do-i-fix)를 사용 했습니까? –

+0

링크를 가져 주셔서 감사합니다. 내 문제는 목록의 첫 번째 (적절한 라이브러리/개체 파일에 대한 링크 실패 또는 구현 파일 컴파일 실패)라고 가정합니다. Cmake 파일에 정확한 라이브러리 파일을 찾는 방법을 알지 못한다. (g ++에서는 -lcppunit으로 직접 작업한다.) 내가 누락 된 부분에 대한 어떤 생각? – markus

답변

1

오케이 방금 실수를 발견했습니다. 에서 : 우수한 링크

-1

CMakeFiles/test.dir/canonunittest.cpp.o에 대한 πάντα ῥεῖ 감사합니다 @

cmake_minimum_required(VERSION 2.8) 
project(simpletest) 

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

: 나는 LINK_LIBRARIES 대신 target_link_libraries

이 CMakeLists.txt가 잘 작동을 사용 함수 CppUnit::AutoRegisterSuite<canonunittest>::AutoRegisterSuite()': canonunittest.cpp:(.text._ZN7CppUnit17AutoRegisterSuiteI13canonunittestEC2Ev[_ZN7CppUnit17AutoRegisterSuiteI13canonunittestEC5Ev]+0x44): undefined reference to CppUnit :: TestFactoryRegistry :: getRegistry (stlp_std :: basic_string, stlp_std :: allocator> const &) ' CMakeFiles/test.dir/canonunittest.cpp.o : 함수`CppUnit :: TestSuiteFactory :: makeTest()'에서 :

+0

동일한 문제 (링커가 cppunit 오브젝트 파일을 찾지 못했을 경우)를 갖고 있는지 또는 대문자와 동일한 답변을 공유하고 싶었는지 확실하지 않습니다. 내 솔루션은 LINK_LIBRARIES 대신 target_link_libraries (yourTarget cppunit)를 사용하는 것이 었습니다. 그 후 모든 것이 잘 작동했습니다. – markus

관련 문제