代码之家  ›  专栏  ›  技术社区  ›  Leedehai

如何在Linux上使用g++构建和使用GoogleTest共享库(.so)?

  •  0
  • Leedehai  · 技术社区  · 6 年前

    注意 不是复制品 this question this question

    如何构建Googletest 来源 在共享库中使用g++(.so)?

    Google Test's document 如何构建共享库,但将生成的 libgtest.so 我的测试程序不起作用-链接器抛出

    “gtest all.cc:(.text+0x19b50):testing::internal::HasNewFatalFailureHelper::~HasNewFatalFailureHelper()'libgtest.so:gtest all.cc:(.text+0x19b50):首先在此处定义 ./libgtest.so:在函数“testing::internal::HasNewFatalFailureHelper::~HasNewFatalFailureHelper()”中: gtest all.cc:(.text+0x19bc4):多重定义“testing::internal::HasNewFatalFailureHelper::ReportTestPartResult(testing::TestPartResult const&)” libgtest.so:gtest all.cc:(.text+0x19bc4):首先在此处定义 ./libgtest.so:在函数“testing::internal::TypedTestCasePState::VerifyRegisteredTestNames(char const*,int,char const*)”中:

    建造时 libgtest.so.公司

    g++ -fPIC -DGTEST_CREATE_SHARED_LIBRARY=1 -pthread -c $(GTEST)/src/gtest-all.cc -shared (该宏在前面提到的Google Test文档中是必需的),然后 mv gtest-all.o libgtest.so

    当链接到 ,我使用了加载标志 -DGTEST_LINKED_AS_SHARED_LIBRARY=1 ,正如前面提到的Google Test文档中推荐的那样。我也用过 -L

    注: 如果我选择建立一个 libgtest.a Google Test document ). 为什么我想从 我想让可执行文件在运行时加载GoogleTest,这样链接可能会更快。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Leedehai    6 年前

    这是我找到的解决办法。

    步骤1 . 生成对象文件 gtest-all.o

    g++-fPIC-isystem../path/to/googletest/include-I../utils/third-party/googletest/-pthread-c../path/to/googletest/src/gtest-all.cc

    它是由 GoogleTest's doc -DGTEST_CREATE_SHARED_LIBRARY=1 执行上面的命令。

    步骤2 . 编译共享库

    那么

    一定要用 -Wl,-rpath=./path/to/libgtest.so 旗帜。之间没有空白 -Wl, -rpath -Wl,option 意味着通过 option more on -Wl,option ). 建议添加标志 -DGTEST_LINKED_AS_SHARED_LIBRARY=1