【问题标题】:How to compile a gtest cpp file? [duplicate]如何编译 gtest cpp 文件? [复制]
【发布时间】:2014-11-24 01:20:05
【问题描述】:

在 Ubuntu Linux 上,我一直按照 gtest 给出的 here 说明安装 gtest,并将头文件和库分别手动复制到 /usr/include 和 /usr/lib。

然后我尝试编译以下代码 (test1.cpp)

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

使用以下命令

g++ -lgtest -lgtest_main -lpthread test1.cpp 

只是为了看到另一个无用的错误消息:

/usr/bin/ld: /tmp/ccQlmghI.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

我该如何解决这个问题?或者是否有另一个可以以简单方式使用的单元测试框架,并带有一个工作示例?

here 提出了同样的问题,但没有答案。

【问题讨论】:

    标签: c++ linux unit-testing


    【解决方案1】:

    g++ 的参数顺序很重要。源文件应该在目标文件和库之前(从高级库到低级库)等。阅读invoking GCC的章节。

    那就试试吧:

    g++ -Wall -g -pthread test1.cpp -lgtest_main  -lgtest -lpthread 
    

    【讨论】:

    • 创建一堆新错误:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: undefined reference到pthread_key_create' /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: undefined reference to pthread_getspecific'/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so:未定义引用pthread_key_delete' /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: undefined reference to pthread_setspecific'collect2:错误: ld 返回 1 个退出状态
    • 可能没有安装 pthread 之类的?
    • 你的例子中的-pthread是什么意思?
    • -pthread 告诉 gcc 使用 pthread 库,不需要使用 -lpthread
    • 不,-pthread 是 GCC 的内置开关,而不是一般链接库的新方法
    【解决方案2】:

    为了将gtest 库链接到您的gtest,似乎必须使用静态gtest 库(原因不明;请参阅here)。所以不要像

    那样使用命令行
    g++ -Wall -g -pthread test1.cpp -lgtest_main  -lgtest -lpthread
    

    必须使用

    g++ -Wall -g  -pthread test1.cpp    /usr/lib/libgtest.a 
    

    这里,库位于/usr/lib,但取决于gtest 的安装方式,文件libgtest.a 位于其他位置。

    【讨论】:

    • gtest 安装后你运行ldconfig了吗?
    • 使用-L 指定库的其他搜索路径,而不是直接引用特定的.a 文件。
    • 很棒的发现!为了扩展您的答案,g++ -Wall -g -pthread test1.cpp -lgtest 为我工作。
    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多