linux cmake使用静态库,gcc – 强制CMake使用静态库

[无耻地从CMake帮助列表中交叉发布]

我正试图尽可能静态地创建二进制文件.我得到的fortran代码有X11和quadmath作为依赖项,我遇到了很多问题(可能每个问题都应该是一个不同的问题?):

>我的变量是目前的

set(CMAKE_LIBRARY_PATH /usr/X11/lib /usr/X11/include/X11 ${CMAKE_LIBRARY_PATH})

find_package(X11 REQUIRED)

find_library(X11 NAMES X11.a PATHS /usr/X11/include/X11/ /usr/X11/lib)

find_library(X11_Xaw_LIB NAMES Xaw Xaw /usr/X11/include/X11/ /usr/X11/lib ${X11_LIB_SEARCH_PATH})

find_library(Xaw Xaw7 PATHS ${X11_LIB_SEARCH_PATH})

set(CMAKE_LIBRARY_PATH /usr/lib/gcc/x86_64-linux-gnu/4.7 /usr/lib/gcc/x86_64-linux-gnu/4.7/x32 /usr/lib/gcc/x86_64-linux-gnu/4.7/32 ${CMAKE_LIBRARY_PATH})

find_library(quadmath NAMES quadmath.a)

set(BUILD_SHARED_LIBS ON)

set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})

set(LINK_SEARCH_START_STATIC TRUE)

set(LINK_SEARCH_END_STATIC TRUE)

set(SHARED_LIBS OFF)

set(STATIC_LIBS ON)

set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")

使用这些,CMake尝试静态地构建每个程序(如预期的那样) – 然而,它失败了因为我没有Xaw.a – 我无法确定这是否真的应该存在.我已经安装了最新的libxaw7-dev,我希望能解决它.一种选择是自己编译X11库,但我真的不想这样做……

>如果我注释掉只设置(CMAKE_EXE_LINKER_FLAGS“${} CMAKE_EXE_LINKER_FLAGS -static”),然后CMake的编译一切,但使用共享库的每一个程序,即使我指定我find_library .A X11库的位置()调用.我期待CMake在可能的地方使用.a文件然后只使用共享库 – 有没有办法强制这种行为?

>有没有人知道这里描述的错误修复:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46539;因此gfortran似乎无法静态链接libquadmath?我尝试使用gcc修复但我无法让CMake识别libgfortran标志:

cmake -DCMAKE_Fortran_COMPILER=gcc -DCMAKE_Fortran_FLAGS=-gfortran

结果是

-- The Fortran compiler identification is unknown

-- Check for working Fortran compiler: /usr/bin/gcc

-- Check for working Fortran compiler: /usr/bin/gcc -- broken

CMake Error at /usr/share/cmake-2.8/Modules/CMakeTestFortranCompiler.cmake:54 (message):

The Fortran compiler "/usr/bin/gcc" is not able to compile a simple test program.

但是,正如您可能已经注意到的那样,我设置了libquadmath.a的位置;当我构建一个不使用X11但在使用时使用quadmath的程序

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")

然后程序成功编译(运行ldd报告’不是动态可执行文件’) – 这是否意味着错误已经修复,或者只是因为我在CMake中设置了位置?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值