首页 > 解决方案 > 为什么不能将 libgtest.a 移动到其他位置?

问题描述

尊敬的 gtest/cmake 专家: 有没有办法从与创建位置不同的位置使用 gtest 存档 libgtest.a?

这是我的工作案例

libgtest 位置/usr/lib/x86_64-linux-gnu/libgtest.a 以及在 /usr/src/googletest/googletest/lib/libgtest.a

(我不确定它为什么/如何出现在两个位置。它可能是我很久以前复制/粘贴的)。gtest 的源代码和 CMakeLists 等位于/usr/src/googletest/

CMakeLists.txt:

< .. link other libraries, dependencies etc .. >
target_link_libraries(Application PRIVATE libgtest.a)

注意:应用程序正在构建为“共享对象”。libgtest.a 是静态的。但这很好用。

非工作案例:

我将 libgtest.a 复制到另一个位置:

 /my/project/dir/depends/pkgs/libgtest.a

CMakeLists.txt:

< .. link other libraries, dependencies etc .. >
target_link_libraries(Application PRIVATE /my/project/dir/depends/pkgget/libgtest.a)

这会引发很多“重定位/ fPIC”相关的错误。例如:

ld.lld: error: relocation R_X86_64_PC32 cannot be used against symbol testing::FLAGS_gtest_output[abi:cxx11]; recompile with -fPIC
>>> defined in ../../depends/lib/libgtest.a(gtest-all.cc.o)
>>> referenced by gtest-all.cc
>>>               gtest-all.cc.o:(testing::internal::UnitTestOptions::GetOutputFormat[abi:cxx11]()) in archive ../../depends/lib/libgtest.a

ld.lld: error: relocation R_X86_64_PC32 cannot be used against symbol testing::FLAGS_gtest_output[abi:cxx11]; recompile with -fPIC
>>> defined in ../../depends/lib/libgtest.a(gtest-all.cc.o)
>>> referenced by gtest-all.cc
>>>               gtest-all.cc.o:(testing::internal::UnitTestOptions::GetAbsolutePathToOutputFile[abi:cxx11]()) in archive ../../depends/lib/libgtest.a

问题:

  1. 为什么在前一种情况下重定位/ fPIC 没有问题,但在后一种情况下有问题?是什么赋予了?
  2. 从不同位置使用预编译存档的正确方法是什么?

我期待着您的意见。

此致,

——文克

标签: cmakegoogletestfpic

解决方案


推荐阅读