gpt4 book ai didi

c++ - CMake 不必要的依赖

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:55 24 4
gpt4 key购买 nike

我有一个使用 3 CMakeLists.txt 的项目:

  • CMakeLists.txt C 是我的可执行文件并且依赖于
  • CMakeLists.txt B 这是一个静态库,它依赖于
  • CMakeLists.txt A 也是静态库,依赖于外部库

在 CMakeLists.txt C 中,我使用 target_link_libraries() 指定了我对 B 的依赖,我对 < strong>B 对抗 A。在 CMakeLists.txt A 中,我指定了对外部库的依赖。

The CMakeLists.txt and dependencies

我希望它能工作,但 C 实际上在链接时提示,我只能通过在 C 中指定对外部库的依赖来让它工作。

请注意,外部库是动态的(.so 文件)。

我觉得这很奇怪,不是吗?任何人都知道发生了什么事吗?

谢谢,

安托万。

最佳答案

那应该行得通。我敢打赌 CMakeLists.txt 中有一个错误。

查看真实依赖

检查它:

cmake .. --graphviz=deps.dot
xdot deps.dot

它将显示 cmake 看到的依赖树的漂亮图片。

如果你没有 xdot,将其导出为 png:

dot -Tpng deps.dot -o deps.png 
firefox deps.png

找不到库?

另一种可能是实际上找不到外部库。使用 find_library而不是仅仅输入库名称:

find_library(FAIL failingmadly)
if (NOT FAIL)
message(FATAL_ERROR "Couldn't find the failingmadly library")
endif()
target_link_libraries(my_lib_a ${FAIL})

位置独立代码?

将静态库与共享库的依赖关系链接时的另一种可能性是 PIC 投诉。您可以在编译任何内容之前在 cmake 中添加它:

add_definitions(-fPIC)

祝你好运。

关于c++ - CMake 不必要的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38021734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com