【问题标题】:CMake FIND_LIBRARY: link to specified library errorCMake FIND_LIBRARY:链接到指定库错误
【发布时间】:2013-02-23 12:34:10
【问题描述】:

我已经在我的电脑上安装了 FFTW3 库,并且可以在 /usr/lib 中找到以下文件:

libfftw3f.so.3          libfftw3l_threads.so.3
libfftw3f.so.3.3.0      libfftw3l_threads.so.3.3.0
libfftw3f_threads.so.3      libfftw3.so.3
libfftw3f_threads.so.3.3.0  libfftw3.so.3.3.0
libfftw3l.so.3          libfftw3_threads.so.3
libfftw3l.so.3.3.0      libfftw3_threads.so.3.3.0

我想安装另一个需要链接这些库的包,但是当我尝试 FIND_LIBRARY(FFTW3_LIBRARIES fftw3)FIND_LIBRARY(FFTW3_LIBRARIES fftw3f), 它只是找不到库。

我该如何解决这个问题?谢谢!

CMakeLists.txt 中的代码:

FIND_PATH(FFTW3_INCLUDE_DIR fftw3.h)
IF(FFLD_HOGPYRAMID_DOUBLE)
  FIND_LIBRARY(FFTW3_LIBRARIES libfftw3.so.3)
ELSE()
  FIND_LIBRARY(FFTW3_LIBRARIES libfftw3f.so.3)
ENDIF()
#IF(NOT FFTW3_INCLUDE_DIR OR NOT FFTW3_LIBRARIES)
IF(NOT FFTW3_INCLUDE_DIR OR NOT FFTW3_LIBRARIES)
  MESSAGE(FATAL_ERROR "Could not find fftw3.")
ENDIF()

错误信息:

CMake Error at CMakeLists.txt:52 (MESSAGE):
  Could not find fftw3.

【问题讨论】:

    标签: ubuntu cmake


    【解决方案1】:

    您已经安装了动态库,但是您是否安装了“开发”包?您可能需要一个文件或符号链接,名称如下:

    libfftw3.so
    

    您可能需要安装 fftw3-devel(或 fftw3-dev)软件包。

    另外,请尝试删除“lib”前缀和 .so.3 后缀:

    FIND_LIBRARY(FFTW3_LIBRARIES NAMES fftw3 libfftw3)
    

    如果这不起作用,请尝试添加 PATHS 参数:

    FIND_LIBRARY(FFTW3_LIBRARIES NAMES fftw3 libfftw3 PATHS /usr/lib <other paths>)
    

    确保 CMAKE_FIND_ROOT_PATH 变量设置正确(假设您没有进行交叉编译,因此它可能为空,并且 cmake 将使用合理的位置来查找库)。

    find_library 函数的详细用法请参见 cmake 手册页。

    最后,看看这个网站如何编写一个 find_package 脚本: http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries

    【讨论】:

    • 您答案最后一行的链接很有帮助——谢谢! (我已经读了太多次了,但轻而易举地寻找一个简单的答案。最后我决定认真阅读它,并没有让我失望。)
    【解决方案2】:

    我通常希望看到像/usr/lib/libfftw.so -&gt; libfftw.so.3 这样的符号链接。如果这些都到位,您的 find_library 呼叫应该可以正常工作。

    如果您不想添加符号链接,可以将调用更改为:

    find_library(FFTW3_LIBRARIES libfftw3.so.3 /usr/lib)
    find_library(FFTW3F_LIBRARIES libfftw3f.so.3 /usr/lib)
    

    【讨论】:

    • 是的,这些库位于 /usr/lib/ 但 find_library(FFTW3_LIBRARIES libfftw3.so.3) find_library(FFTW3F_LIBRARIES libfftw3f.so.3) 不起作用:(
    • 能否编辑您的问题以显示您收到的错误消息?
    • 按照您的代码,该消息可能意味着找不到包含路径。你能打印${FFTW3_INCLUDE_DIR} ${FFTW3_LIBRARIES}的值吗?
    • 我检查了 FFTW3_INCLUDE_DIR 并找到了它,唯一的问题是 FFTW3_LIBRARIES...找不到所以我无法打印值...
    • 我更新了答案以包含 /usr/lib 作为 find_library 的路径参数。你可以试一试吗?
    【解决方案3】:

    试试 gui-cmakehttp://www.cmake.org/cmake/help/runningcmake.html

    然后你可以手动选择需要的库。

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多