【问题标题】:CMake keeps linking to libraries under /usr/lib64 even full paths to another libraries are givenCMake 不断链接到 /usr/lib64 下的库,甚至给出了另一个库的完整路径
【发布时间】:2014-11-27 07:45:40
【问题描述】:

我正在使用 CMake (3.0.2) 构建一个包。这个包依赖于 boost_python 和其他一些。 /usr/lib64 中有一个旧版本,我自己的目录 /home/x/opt/boost-1.56/lib 中有另一个新版本。有一个符号链接 /home/x/opt/boost-1.56/lib64 来处理多架构 gcc。

但是,即使我设置了BOOST_ROOT=/home/x/opt/boost-1.56/lib,并且在 CMakeCache.txt 中有

//Boost python library (release)
Boost_PYTHON_LIBRARY_RELEASE:FILEPATH=/home/x/opt/boost-1.56/lib/libboost_python.a

生成的link.txt包含这样一行,而不是完整路径:

-Wl,-Bstatic -lboost_python

make 时,它链接到/usr/lib64/ 下的那个,这是错误的。

问题:

  1. 如何让 CMake 使用完整路径?如文档所述,仅当系统默认文件夹下的库处理 -Bstatic 时,我的情况不应该如此。
  2. 为什么即使我在LD_LIBRARY_PATHLIBRARY_PATH 中有“/home/x/opt/boost-1.56/lib”,-Wl,-Bstatic -lboost_python 也不起作用?据我所知,它们应该覆盖系统默认值。

信息:

gcc --print-search-dir 给出:

/home/x/opt/boost-1.56/lib/x86_64-unknown-linux-gnu/4.9.2/
/home/x/opt/boost-1.56/lib/../lib64/
/lib/x86_64-unknown-linux-gnu/4.9.2/
/lib/../lib64/
/usr/lib/x86_64-unknown-linux-gnu/4.9.2/
/usr/lib/../lib64/
/home/x/opt/boost-1.56/lib/
/lib/
/usr/lib/

【问题讨论】:

    标签: linker cmake


    【解决方案1】:
    set(Boost_NO_SYSTEM_PATHS ON)
    

    这将允许它忽略除 BOOST_ROOT 之外的所有内容

    【讨论】:

      【解决方案2】:

      解决方案(仅部分):

      • 如果 CMake 认为它选择的 boost 库位于系统路径中,包括与环境变量相关的库,则使用 -Bstatic。否则使用完整路径。
      • 我仍然找不到 LIBRARY_PATH 无法覆盖系统的原因
      • 因此,要使其正常工作,请 REMOVE LIBRARY_PATH 和 LD_LIBRARY_PATH 中的所有内容:在这种情况下,CMake 将使用完整路径。

      【讨论】:

        【解决方案3】:

        在顶层 CMakeLists.txt 的开头添加这个

        cmake_minimum_required(VERSION 3.3)
        

        并使用 cmake 3.3.0 或更高版本。

        有趣的是,使用 cmake 3.11.1 set(Boost_NO_SYSTEM_PATHS ON) 对我不起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-06
          • 2012-04-22
          • 2018-10-15
          • 2021-04-13
          • 2010-12-28
          • 2023-02-04
          • 1970-01-01
          相关资源
          最近更新 更多