5

ここで本当にばかげたことを見逃していると思います。

libcppunit がインストールされています: (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

そして、簡単なテストがあります:

#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++ -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 の下に存在します

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

これを引き起こしているのは何ですか?

4

4 に答える 4

8

コンパイルするファイルを指定した後、リンクするライブラリをコンパイラに指定する必要があります。

g++ test.cpp -lcppunit -o test.bin 
于 2012-04-24T12:14:14.603 に答える
1

同じ問題に遭遇しました(Ubuntu 11.04で)

これは Ubuntuのバグのようです。あなたの回避策「-Wl、--no-as-needed」は私にとってはうまくいき、リンクされたバグレポートにも回避策として記載されています。実際の原因を発見するのに十分なほど深く掘り下げていません。

于 2012-04-28T05:33:13.023 に答える
1

私が推測する根本的な原因は、Makefile.am に行を追加することを提案する cppunit doc チュートリアル ファイル「money_example.html」です。

MoneyApp_LDFLAGS = $(CPPUNIT_LIBS) -ldl

正しいのではなく

MoneyApp_LDADD = $(CPPUNIT_LIBS) -ldl

またはさらに正しい

MoneyApp_LDADD = $(CPPUNIT_LIBS)

とにかくCPPUNIT_LIBS持ち込むので。リンカーの実行可能ファイル名の直後にフラグを追加し、最後に追加して、元の投稿のエラーを排除します。-ldlLDFLAGSLDADD

于 2012-06-19T10:42:42.970 に答える
0

cppunit および dl (-lcppunit -ldl) ライブラリとのリンクを追加

于 2014-01-16T06:40:50.993 に答える