注意,它不是this question或this question的副本。
如何使用g ++从源代码构建Googletest到共享库(.so)中?
我尝试了Google Test's document中描述的有关如何建立共享库的步骤,但是将生成的libgtest.so
与我的测试程序链接不起作用-链接器抛出 tons 之类的错误:
“ 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测试的文档中是必需的),然后mv gtest-all.o libgtest.so
当与libgtest.so
链接时,按照上述Google测试文档中的建议,我使用了加载标志-DGTEST_LINKED_AS_SHARED_LIBRARY=1
。我还使用了-L
标志来告诉g ++库在哪里。
注意::如果我选择从源代码构建libgtest.a
存档并将我的测试程序与此存档相关联,那么一切都很好(有关如何构建它的说明,请参见{ {3}})。我想从libgtest.a
切换到libgtest.so
的原因是我希望可执行文件在运行时加载GoogleTest,因此链接可能会更快。
答案 0 :(得分:0)
这是我找到的解决方案。
步骤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步。编译共享库
g ++ -fPIC-共享的gtest-all.o -o libgtest.so
然后,以链接到共享库
确保使用-Wl,-rpath=./path/to/libgtest.so
标志。 -Wl,
和-rpath
之间没有空格(-Wl,option
意味着将option
传递给链接器more on -Wl,option)。建议添加标志-DGTEST_LINKED_AS_SHARED_LIBRARY=1
。