2012-04-19 11 views
5

Ich denke, ich vermisse etwas wirklich dumm hier.Wie verbinde ich mich mit cppunit?

Ich habe libcppunit installiert: (Ich bin mit Ubuntu 12,04)

$ 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 

Und ich habe einen einfachen Test:

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

Und ich dies ist der Compiler Ausgabe:

$ 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 

Um sicherzustellen, dass die Bibliotheken existieren unter/usr/lib

$ ls /usr/lib/ | grep cppunit 
libcppunit-1.12.so.1 
libcppunit-1.12.so.1.0.0 
libcppunit.a 
libcppunit.la 
libcppunit.so 

Was fehlt mir, was das verursacht?

+0

Eine Arbeit um die ich gefunden habe ist zu platzieren "-Wl, - no-as-needed" vor "-lcppunit" – Naddiseo

Antwort

8

Sie haben den Compiler zu sagen, was es Link Libraries Sie nach sagen, welche, dh

g++ test.cpp -lcppunit -o test.bin 
+0

es ist möglich dies auch für den googeltest zu tun? –

+2

@MartinPfeffer Es ist * allgemein * notwendig, Linkoptionen nach den Kompilieroptionen zu platzieren. – steffen

1

Ich lief in das gleiche Problem zu kompilieren Dateien (mit Ubuntu 11.04)

Diese scheint in Ubuntu ein bug zu sein. Ihre Problemumgehung "-WL, - no-as-need" funktioniert bei mir und wird auch als Problemumgehung im verlinkten Fehlerbericht erwähnt. Ich habe mich nicht genug damit beschäftigt, die eigentliche Ursache zu entdecken.

+0

Siehe https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition. Leider scheint dies der falsche Ansatz zu sein. – moggi

1

Die Ursache Ich denke, ist die cppunit doc Tutorial-Datei "money_example.html", die auf die Makefile.am eine Linie

MoneyApp_LDFLAGS = $(CPPUNIT_LIBS) -ldl 

anstelle des richtigen

MoneyApp_LDADD = $(CPPUNIT_LIBS) -ldl 

hinzuzufügen schlägt oder noch richtig

MoneyApp_LDADD = $(CPPUNIT_LIBS) 

seit CPPUNIT_LIBS bringt imJedenfalls. LDFLAGS fügt die Flags direkt nach dem ausführbaren Linker-Namen hinzu, LDADD fügt sie am Ende hinzu und beseitigt den Fehler im ursprünglichen Post.

0

Add Link mit cppunit und dl (-lcppunit -ldl) Bibliotheken