cmake - 为什么不能将 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
问题:
- 为什么在前一种情况下重定位/ fPIC 没有问题,但在后一种情况下有问题?是什么赋予了?
- 从不同位置使用预编译存档的正确方法是什么?
我期待着您的意见。
此致,
——文克
解决方案
推荐阅读
- python - 使用 matplotlib 不使用 imshow 后保存空白图像
- reactjs - 跟踪无线电输入状态 React
- java - 处理 Sys refcursor 时如何解决 java.lang.ClassCastException?
- python - 在python中使用客户端套接字架构发送多个文件时出错
- c - STM32定时器频率是否等于PWM输出频率?
- python - 处理字符串列表中的法语字符
- angularjs - 我怎样才能拥有开源框架的作者许可证?
- vba - 将 Outlook 传入邮件移动到以相同代码开头的文件夹
- laravel - Laravel foreach 保存数据
- node.js - 每隔很短的时间更新快速服务器上的操作