Linker CMake找到fftw库,但无法链接

Linker CMake找到fftw库,但无法链接,linker,cmake,ros,Linker,Cmake,Ros,使用cmake链接fftw库时出现问题。我使用findFFTW.cmake文件来查找库。我知道这是成功地找到库,因为我将查找库所需的标志设置为true,并且make过程进行得很好 尽管将它与我的可执行文件链接,我仍然会遇到未定义的引用错误。一些相关的帖子,我尝试过他们的解决方案 更新 多亏了ComicSanms,下面的CMake现在应该能够正确地对依赖项进行建模 CMake项目文件(7月3日更新) 编辑2 如果使用上面的CMake文件,我们现在会出现链接错误。特别是当我尝试运行时,make进

使用cmake链接fftw库时出现问题。我使用findFFTW.cmake文件来查找库。我知道这是成功地找到库,因为我将查找库所需的标志设置为true,并且make过程进行得很好

尽管将它与我的可执行文件链接,我仍然会遇到未定义的引用错误。一些相关的帖子,我尝试过他们的解决方案

更新

多亏了ComicSanms,下面的CMake现在应该能够正确地对依赖项进行建模

CMake项目文件(7月3日更新)

编辑2

如果使用上面的CMake文件,我们现在会出现链接错误。特别是当我尝试运行时,make进程失败

target_link_libraries(gist_extractor ${catkin_LIBRARIES} gist)
我有一些观察。首先,我的gist库是基于以下控制台消息正确构建的

Linking C shared library /home/andy/Projects/ROS/robot_ws/devel/lib/libgist.so
[ 80%] Built target gist
Scanning dependencies of target gist_extractor
[100%] Building CXX object 
`gist_extractor/CMakeFiles/gist_extractor.dir/src/gist_extractor.cpp.o
但我们可以看到,当我们试图将可执行文件与gist库链接时,存在未定义的引用错误

Linking CXX executable gist_extractor
: undefined reference to `color_gist_scaletab'
这就是为什么我不明白为什么会发生这种情况。在gist_extractor.cpp中,我包含了包含“color_gist_scaletab”函数的头文件。具体地说,这个“color\u gist\u scaletab”在“gist.h”中定义,并在“gist.c”中实现。我认为构建我的库gist应该让我能够访问“color\u gist\u scaletab”。我已经在下面发布了相关文件

要点h

gist_提取器.cpp


您似乎没有正确地对依赖项进行建模

您可以从
gist.c
内部使用fftw,它是
gist
库目标的一部分

但是,该目标不依赖于fftw,只有下游目标
gist_提取器
具有。这会带来麻烦,尤其是在静态构建中,在静态构建中,工具链常常对库在链接器命令行上的显示顺序非常挑剔

将fftw作为依赖项添加到gist中:

target_link_libraries(gist ${FFTW_LIBRARIES})
此外,没有必要这样做:

add_dependencies(gist_extractor gist)
target_link_libraries(gist_extractor ${GIST_PATH}/libleargist.a)
如果两个目标都是作为同一项目的一部分构建的,只需执行以下操作:

target_link_libraries(gist_extractor gist)

通过使用目标名称而不是硬编码输出文件,不仅可以使构建脚本更具可移植性,还可以让CMake更好地跟踪目标间的依赖关系。

Hey。谢谢你的评论。这太有用了!对依赖项进行建模的方式很有意义。在采纳了你的建议后,我意识到我的图书馆“要点”并没有建立起来。因此,我仍然会得到未定义的符号错误。你知道为什么会出现这种情况吗?我如何解决?正是这个问题迫使我硬编码libleargist.a。为了更好地解释这一点,我在原来的帖子中更新了代码。@AndyLee你确定没有构建
gist
?因为你发布的代码中没有任何东西会导致这种情况。尝试从命令行运行
makegist
。您不应该收到任何投诉。抱歉,gist实际上正在生成,因为我可以找到libgist.so文件。真正的问题是,当我尝试目标链接库(gist\u提取器gist…)时,出现了链接器错误。我的可执行gist_提取器出现未定义的引用错误。我在gist_extractor.cpp中包含了相关的头文件,现在我正在正确地建模依赖项,所以我不明白为什么会出现这个问题。我用相关代码更新了EDITS2下的帖子。任何帮助都将不胜感激。
target_link_libraries(gist ${FFTW_LIBRARIES})
add_dependencies(gist_extractor gist)
target_link_libraries(gist_extractor ${GIST_PATH}/libleargist.a)
target_link_libraries(gist_extractor gist)