【问题标题】:CMAKE/MAKEFILE : /usr/bin/x86_64-linux-gnu-ld : Cannot find -lfftw3fCMAKE/MAKEFILE:/usr/bin/x86_64-linux-gnu-ld:找不到-lfftw3f
【发布时间】:2021-01-02 03:03:02
【问题描述】:

我在服务器上使用 cmake 和 makefile 运行一些 c 代码,并且我正在使用一个库,但是当我运行 make 时,我得到了这个错误:

/usr/bin/x86_64-linux-gnu-ld: cannot find -lfftw3f

该库已经安装并位于/usr/lib/x86_64-linux-gnu/,有什么建议吗?这是我的 CMAKE 文件

cmake_minimum_required(VERSION 3.5)
project(sfa C)

set(CMAKE_C_STANDARD 11)

set(LIBSFA src/pqueue.c src/sfa_file_loaders.c  src/sfa_trie.c src/sfa_node.c   src/ts.c src/calc_utils.c src/sfa_query_engine.c  src/sfa_file_buffer.c src/sfa_file_buffer_manager.c src/dft.c)
add_library(libsfa STATIC "${LIBSFA}")

add_executable(sfa src/sfa.c )
link_directories(/usr/lib/x86_64-linux-gnu/)
target_link_libraries(sfa libsfa m fftw3f jemalloc readline)

谢谢

【问题讨论】:

  • 安装库后你运行ldconfig了吗? cmake 一切都很好,但如果您可以发布 [生成] Makefile 的相关部分,它可能会有所帮助。而且,make 命令本身的输出(即make 将显示它使用的 exact 命令)。你说图书馆在/home/usr/lib/x86_64-linux-gnu/字面意思 是真的还是/home 前缀是错字?
  • 您使用的是什么操作系统 [和发行版]? libfftw* 的正常位置是/usr/lib64(在(例如)linux fedora 下)。我注意到您的安装位置(以及 ld 命令上的 x86_64-linux-gnu-* 前缀)看起来更像是交叉构建安装而不是原生安装。你可以在你的库上使用file [和/或readelf] 命令来验证它是为正确的拱门构建的吗?
  • @CraigEstey 我在 ubuntu 服务器上运行代码,抱歉库实际上在 /usr/lib/x86_64-linux-gnu/ 中,我认为自安装以来架构不是问题已成功完成...
  • 好吧,那么。它应该可以工作,但事实并非如此。我建议的事情呢?运行ldconfig。发布Makefile。发布make 输出。在文件上运行file?尝试使用-t 运行ld/usr/lib/x86_64-linux 是否有 ld.so.conf 条目?另外,您可以在strace 下运行ld
  • 我没有 sudo 权限,所以 ldconfig 不起作用:\

标签: c ubuntu gcc makefile cmake


【解决方案1】:

通常情况下,提供以前开发的程序以使用它的库与您实际需要包含一些要使用的库的文件之间存在差异。

CMake 通过查询属于它的 #include <blahblah.h> 文件来检查是否安装了库的 development 版本。如果它没有找到它们,那么它会抱怨。

问题很可能是这样的:您在系统上安装了库,但没有安装开发版本,其中包含用于开发所需的所有包含文件。可能您需要安装一些 libfftw3-dev 包或类似名称来安装包含文件,这样才能使用该库进行开发。

【讨论】:

    【解决方案2】:

    您从源代码编译并进行安装的程序通常会在 /usr/local/bin、/usr/local/lib 等中结束,您可能会遇到问题,因为 Debian/Ubuntu 中的用户安装路径是 /usr 而不是 /usr/local。 因此,不要使用默认模式编译程序,而是:

    cd $HOME && mkdir local local/src local/bin local/lib && cd local/src
    wget link_the_file.tar.gz && tar -zxvf the_file.tar.gz
    cd the_file_decompressed && ./configure --prefix=$HOME/local --enable-type-prefix
    make && make install
    

    确保 $HOME/Path 在您的路径中。

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 2020-06-18
      • 2021-05-07
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多