【发布时间】:2013-09-19 09:41:50
【问题描述】:
[从 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 尝试静态构建 every 程序(如预期的那样) - 但是,它失败了,因为我没有 Xaw.a - 我无法确定这是否真的应该存在.我已经安装了最新的libxaw7-dev,我希望能修复它。一种选择是自己编译 X11 库,但我真的不想这样做...
如果我只注释掉
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static"),那么 CMake 会编译所有内容,但是 为每个程序使用共享库,即使我在 @ 987654327@ 电话。我期待 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 中设置了位置才有效?
【问题讨论】:
标签: gcc cmake static-libraries static-linking gfortran