首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

cmake find_library即使使用绝对路径也不起作用

cmake find_library是CMake构建系统中的一个命令,用于在编译过程中查找并链接库文件。即使使用绝对路径指定库文件的位置,有时候也可能不起作用的原因有以下几种可能性:

  1. 库文件路径错误:即使使用绝对路径指定了库文件的位置,也需要确保路径是正确的。可能是路径中包含了错误的字符或者文件不存在。可以通过检查路径是否正确以及文件是否存在来解决此问题。
  2. 库文件不兼容:库文件可能与当前的编译环境不兼容,例如库文件是针对不同操作系统或者不同架构编译的。在这种情况下,即使路径正确,链接库也会失败。可以尝试使用与当前环境兼容的库文件。
  3. CMake缓存问题:CMake会将查找到的库文件路径缓存起来,如果之前缓存的路径不正确,即使使用绝对路径也不起作用。可以尝试清除CMake的缓存,重新运行CMake来解决此问题。
  4. 编译器选项问题:有时候,编译器选项可能会影响到库文件的链接。例如,某些编译器可能需要指定额外的链接选项才能正确链接库文件。可以查阅编译器文档或者相关的编译器选项来解决此问题。

总结起来,即使使用绝对路径指定库文件的位置,也可能出现链接失败的情况。需要确保路径正确、库文件兼容、CMake缓存清除以及编译器选项正确设置。如果问题仍然存在,可以进一步检查编译日志以及相关文档来解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

caffe:cmake编译指定glog,gflag路径

使用cmake编译caffe的情况下,在 cmake生成Makefile时会自动找到系统安装的glog,gflag,但是如是我们自己编译了一个glog,gflag,并没有安装在(/usr)系统目录下,...而是放在用户目录(/home)下,要想使用这个glog,gflag版本,不做处理cmake是找不到的。...寻找glog,gflag的代码有bug(目前还没修改),导致即使如上一步通过GLOG_ROOT_DIR,GFLAGS_ROOT_DIR指定了glog,gflag路径,cmake不会找到该路径下的glog...原因分析 这个问题的根本原因在于代码作者对cmakefind_library的查找机制没有全搞明白 简单说就是调用find_library时,会以从一组路径中顺序查找指定的库,这有一个优先序问题...解决的办法cmake官网给出来了,就是调用两次find_library,第一次加NO_DEFAULT_PATH,第二次则不加。

2.9K50

Linux下CMake简明教程

: 在指定目录下查找指定库,并把库的绝对路径存放到变量里,其第一个参数是变量名称,第二个参数是库名称,第三个参数是HINTS,第4个参数是路径,其它用法可以参考cmake文档 target_link_libraries...: 把目标文件与库文件进行链接 使用find_library的好处是在执行cmake ..时就会去查找库是否存在,这样可以提前发现错误,不用等到链接时。...ps:在lib目录下有testFunc的静态库和动态库,find_library(TESTFUNC_LIB testFunc ...默认是查找动态库,如果想直接指定使用动态库还是静态库,可以写成find_library.../xx来查看 之前本节教程使用的是库查找方法是link_directories,但是很多读者反映运行时有问题,本人去官方文档上查了下,发现不建议使用了,推荐使用find_library或者find_package...,那么这次虽然没设置A,会默认使用A上次的option值。

1.9K10
  • CMake简介及使用实例

    CMake支持静态与动态程式库的建构。 “CMake”这个名字是“cross platform make”的缩写。...参数间使用空格进行分隔。使用一对双引号包裹的被认为是一个参数。我们的命令可以是一个内置命令(如project),可以是一个用户定义的宏(macro)或者函数(function)。...需要注意的是,即使在字符串中可以使用 ${VariableName}来访问变量的值: set(VAR ab c) # 输出 VAR = a;b;c message("VAR= ${VAR}...) if(file1 IS_NEWER_THAN file2) 为真的前提是file1比 file2新或者 file1、file2中有一个文件不存在(应该使用绝对路径) if(IS_DIRECTORY...(SEND_ERROR "Header file lua.hnot found") endif() find_library命令 命令语法:find_library(name1 [path1

    2.5K21

    CentOS7.8下编译muduo库找不到Boost库报错的解决方法

    很是纳闷,估计是/usr/local/boost目录不是默认的安装目录所以会导致这个问题吧,最后找到了如下两篇博客: Linux下使用CMake进行编译的时候寻找Boost库 cmake使用boost库...根据简书上的这篇博客Linux下使用CMake进行编译的时候寻找Boost库 ?...三、使用cmake编译安装muduo库 cd /root/GithubProjects/muduo mkdir build cd build cmake .. make make install ?...四、使用编译muduo-tutorial muduo-tutorial示例程序的README文件描述了如何使用muduo库: Examples of Muduo network library 0)..../ 上面4种方法中,我所熟悉的是第三种和第四种,这里我以cmake第三种为例: 注意:不论使用make还是cmake也好,注意:muduo库的路径需要根据自己编译后的路径为准。

    1.9K20

    NDK--CMakeLists配置第三方so库

    当我们创建一个NDK工程时,会自动创建一个CMakeLists.txt的文件,在AS中c++的编译器是使用LLVM,规则为cmake,今天来学习下cmake的基本套路 首先,我创建了两个NDK工程,第一个工程为...AS中默认存放so库的目录需要在src/main中创建一个jniLibs的文件夹,可以通过gradle配置,指定目录 在app.gralde中的android目录下 sourceSets.main...首先,为了以后方便使用,我们为so库的路径设置一个别名 #设置so库路径 set(my_lib_path ${CMAKE_SOURCE_DIR}/../../...../libs) ${CMAKE_SOURCE_DIR}为CMakeLists文件的当前路径,以后我们就可以直接使用my_lib_path了 2.第二步,我们配置导入的so库 #将第三方库作为动态库引用 add_library...native-lib.cpp) find_library( # Sets the name of the path variable.

    4.5K30

    程序员C语言快速上手——工程篇(十三)

    内置变量 在cmake中已经内置了一些变量,我们可以直接使用使用set命令去修改 CMAKE_SOURCE_DIR或PROJECT_SOURCE_DIR 表示工程的根目录 CMAKE_BINARY_DIR...,生成一个可执行程序 add_library使用给定的源文件,生成一个库(静态库或共享库) add_subdirectory添加一个子目录,该子目录必须包含一个CMakeLists.txt文件 include_directories...-G "MinGW Makefiles" ..命令自动生成Makefile文件,然后执行make命令进行编译,完成后build目录下即生成main.exe 当链接已经编译好的库时,推荐使用find_library...find_library命令原型如下,第一个参数为变量,第二个参数为库名称,最后面可以填入多个路径find_library( name1 [path1 path2 ...]) # 在指定的目录下查找名为...calc的库, # 并将库文件的绝对路径保存到变量STATIC_LIB中 find_library(STATIC_LIB calc "${PROJECT_BINARY_DIR}/calc") message

    3.1K30

    【Android NDK 开发】CMake 中查找链接 Android 自带动态库位置说明 ( ndk-bundleplatformsandroid-29arch-armusrlib )

    配置 二、CMakeLists.txt 完整带注释配置 一、BuildType#javaCompileOptions 配置 ---- 参考 【Android NDK 开发】Android Studio 使用...CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 ) 博客中的 CMake 配置的 ndk 代码 , 其中 使用find_library...-29\arch-arm\usr\lib\liblog.so # 不同的 Android 版本号 和 CPU 架构 需要到对应的目录中查找 , 此处是 29 版本 32 位 ARM 架构的日志库 find_library...配置中 , 使用 log 名称即可 ; 二、CMakeLists.txt 完整带注释配置 ---- # 指定 CMake 最低版本 cmake_minimum_required(VERSION 3.4.1...} 是本 CMakeList.txt 构建脚本的路径 , 是 CMake 工具内置的变量 # Android CMake 内置了一些变量 , 如 ANDROID_ABI

    1.2K10

    CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )

    文章目录 一、Android Studio 中使用 CMake 编译单个 C++ 源文件 二、cmake_minimum_required 命令设置最小 CMake 版本 三、project 命令设置工程名称...详细中文注释 该系列博客的应用场景是 Android Studio 下 NDK 编程 , 使用 CMake 构建 C/C++ 工程 ; 一、Android Studio 中使用 CMake 编译单个 C...} ) 下面开始逐个解析上面使用到的命令 ; CMakeList.txt 中使用到的命令一共只有 93 个, 47 个脚本命令 , 46 个工程命令 , 可以到 CMake 官方查询这些命令的用法..., 在稍后的博客中会逐一讲解 Android Studio 中的 NDK 常用的 CMake 命令 ; 参考 【CMakeCMake 引入 ( Android NDK 构建脚本 | CMake 命令手册...native-lib.cpp ) 官方文档地址 : https://cmake.org/cmake/help/latest/command/add_library.html 五、find_library

    4.3K00

    cmake:gperftools性能分析工具find libprofiler 脚本暨profiler的静态连接问题

    gperftools是一个很好用的性能分析工具,但没有提供官方的用于查找profiler库的cmake脚本,所以在基于cmake管理的项目中如果要在系统查找libprofiler库就就要自己写FindPROFILER.cmake...将脚本所在的文件夹加入CMAKE_MODULE_PATH,调用find_package(PROFILER),就会找到系统中安装的gperftools的libprofiler库, 脚本不仅按传统方式输出...FindPROFILER.cmake # - Find libprofiler # - This module determines the libprofiler library of the system.../usr/lib/libtcmalloc_and_profiler.a 确实直接静态连接libprofiler.a是不行的,但这里明确给出了静态连接profiler的方式:用libtcmalloc_and_profiler.a...所以在上面的cmake脚本中当LIBPROFILER_STATIC_LINK 为TRUE时,会替换 profiler 为 :libtcmalloc_and_profiler.a

    1.7K20
    领券