我正在尝试构建静态可执行文件但是没有成功构建。在添加以下行之前,它工作正常:
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
SET(BUILD_SHARED_LIBRARIES OFF)
SET(CMAKE_EXE_LINKER_FLAGS "-static")
我想将其转换为静态可执行文件。有任何帮助或建议吗?
这是我的cmake代码:
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -Werror -lpthread")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
SET(BUILD_SHARED_LIBRARIES OFF)
SET(CMAKE_EXE_LINKER_FLAGS "-static")
add_executable(${PROJECT_NAME} MACOSX_BUNDLE
main.cc
audiofile.cc
button.cc
entity.cc
entity_group.cc
filter.cc
splash_screen_state.cc
sprite.cc
signal.cc
signal_chunk.cc
sound_edit_state.cc
splash_screen_state.cc
sprite.cc
state.cc
state_stack.cc
waveform_chunk_display.cc
waveform_chunk_select_button.cc
waveform_chunk_select_display.cc
waveform_component_display.cc
waveform_display.cc
wwest_app.cc
play_original_button.cc
low_pass_button.cc
high_pass_button.cc
mid_pass_button.cc
reset_button.cc
play_modified_button.cc
speed_up_button.cc
slow_down_button.cc)
find_package(PkgConfig REQUIRED)
pkg_search_module(SDL2 REQUIRED sdl2)
pkg_search_module(SDL2_IMAGE REQUIRED SDL2_image>=2.0.0)
pkg_search_module(SDL2_TTF REQUIRED SDL2_ttf)
pkg_search_module(NFD REQUIRED sdl2)
find_package(OpenGL REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS}
${SDL2_IMAGE_INCLUDE_DIR}
${SDL2_TTF_INCLUDE_DIR}
${OPENGL_INCLUDE_DIRS}
${NFD_INCLUDE_DIRS}
${GTK3_INCLUDE_DIRS})
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
link_directories(${GTK3_LIBRARY_DIRS})
add_definitions(${GTK3_CFLAGS_OTHER})
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES}
${SDL2_IMAGE_LIBRARIES}
${SDL2_TTF_LIBRARIES}
${OPENGL_LIBRARIES}
${NFD_LIBRARIES}
${GTK3_LIBRARIES}
nfd
pthread)
我尝试合并链接中的步骤,但无法正常工作并收到以下错误:
/ usr / bin / ld:动态对象`/usr/lib/x86_64-linux-gnu/libGLU.so'的静态链接 collect2:错误:ld返回1退出状态 src / CMakeFiles / wwest-outreach-app.out.dir / build.make:774:目标'bin / wwest-outreach-app.out'的配方失败 make [2]: * [bin / wwest-outreach-app.out]错误1 CMakeFiles / Makefile2:85:目标'src / CMakeFiles / wwest-outreach-app.out.dir / all'的配方失败 make [1]:* [src / CMakeFiles / wwest-outreach-app.out.dir / all]错误2 Makefile:83:目标'all'的配方失败 make:*** [all]错误2
以下是我尝试过的链接: Compiling a static executable with CMake
注意:我添加了以下行并编译但不是静态的,因为我仍然无法打开其他Linux机器上的输出文件(.out)。
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
答案 0 :(得分:0)
您可以在系统上找到libGLU.a
吗?链接器无法将动态库(libGLU.so
)链接到静态构建的程序。
如果您可以在系统上找到libGLU.a
,请确保它在CMAKE_LIBRARY_PATH
中可用。
如果你/仍然/有问题,cmake通过静态存档选择动态库,请尝试将其添加到find命令上方的CMakeLists.txt:
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
最后但并非最不重要的是,提醒您清除您的cmake缓存,使其不会挂在libGLU.so
上。