【问题标题】:google testing missing DSO谷歌测试缺少 DSO
【发布时间】:2014-12-01 15:46:57
【问题描述】:

我正在学习谷歌测试。我下载了 gtest,运行命令 ./configuremake 并以

结尾
$ sudo cp -a include/gtest /usr/include
$ sudo cp -a lib/.libs/* /usr/lib/

我从here 得到了这一切。我试图运行这段代码

#include <gtest/gtest.h>
TEST(MathTest, TwoPlusTwoEqualsFour) {
    EXPECT_EQ(2 + 2, 4);
}

int main(int argc, char **argv) {
    ::testing::InitGoogleTest( &argc, argv );
    return RUN_ALL_TESTS();
}

喜欢这个

 $ export GTEST_HOME=~/usr/gtest
 $ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH
 $ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp

但我收到一个错误

/usr/bin/ld: /tmp/ccVTj3Rk.o: undefined reference to symbol '_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_b'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

我做错了什么还是一个错误?

【问题讨论】:

  • AFAIK,如果你链接到gtest_main,你不应该实现main()
  • 所以我应该删除main()?你的目的是什么
  • 我在没有main() 的情况下对其进行了测试,并像您一样对其进行了编译。重要的是在test.cpp 之后添加库。
  • 我修复了这个改变 test.cpp 在命令行上的位置。把它放在图书馆之前。即:g++ test.cpp -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread

标签: c++ googletest


【解决方案1】:

将 *.cpp 源文件放在库链接选项的前面:

g++ -I /home/gtest/googletest/include/ -L /home/gtest/googletest/ gtest_demo.cpp -lgtest -lgtest_main -lpthread

【讨论】:

    【解决方案2】:

    您的设置中有一些错误。

    您将 include/gtest 复制到 /usr/include (sudo cp -a include/gtest /usr/include),但是当您尝试编译时,您告诉编译器查找 gtest 标头在 ~/usr/gtest 目录中,而不是在您之前设置的目录中 (/usr/include/gtest)。 lib/.libs/* 文件也发生了同样的事情。您将它们复制到一个地方,并在编译时在另一个地方请求它们。

    保持以下配置:

    $ sudo cp -a include/gtest /usr/include
    $ sudo cp -a lib/.libs/* /usr/lib/
    

    #include &lt;gtest/gtest.h&gt; 更改为#include "gtest/gtest.h" 并尝试像这样编译:

    g++ -g -Wall <your .cpp files> -I /usr/include/gtest/ -L /usr/lib/ -lgtest -lgtest_main -lpthread
    

    运行 ./a.out 文件(或为可执行文件指定的任何名称)后,您应该会看到以下输出

    [==========] Running 1 test from 1 test case.
    [----------] Global test environment set-up.
    [----------] 1 test from MathTest
    [ RUN      ] MathTest.TwoPlusTwoEqualsFour
    [       OK ] MathTest.TwoPlusTwoEqualsFour (0 ms)
    [----------] 1 test from MathTest (0 ms total)
    
    [----------] Global test environment tear-down
    [==========] 1 test from 1 test case ran. (0 ms total)
    [  PASSED  ] 1 test.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-20
      • 2019-01-12
      • 1970-01-01
      • 2016-11-17
      • 2014-07-28
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多