Hello,
I have a problem that I can’t solve. My executable still depends on the libgcc_s_dw2-1.dll dll whereas I want to have it static in the executable.
I have 2 libs A and B in c, one lib C in fortran and I create an executable from these 3 libs. I tried the following lines in my cmakelist.txt :
#add_compile_options(-static -fPIC -ffloat-store -ffinite-math-only -static -O )
#add_link_options(-static-libgcc -static-libstdc++)
#set(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++ ${CMAKE_CXX_FLAGS}")
#set(CMAKE_C_FLAGS "-static-libgcc ${CMAKE_C_FLAGS}")
#set(CMAKE_EXE_LINKER_FLAGS "-Bstatic -static-libgcc -static-libstdc++ ${CMAKE_EXE_LINKER_FLAGS}")
#set(CMAKE_MODULE_LINKER_FLAGS "-static-libgcc -static-libstdc++ ${CMAKE_MODULE_LINKER_FLAGS}")
#set(CMAKE_C_STANDARD_LIBRARIES "-static-libgcc -static-libstdc++ ${CMAKE_CSS_STANDARD_LIBRARIES}")
#set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ ${CMAKE_SHARED_LINKER_FLAGS}")
Mon code cmake done les lignes suivantes :
#set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ ${CMAKE_SHARED_LINKER_FLAGS}")
#cmake_minimum_required(VERSION 3.15)
#project(
#PROJET_fred
#VERSION 1.0
#DESCRIPTION "PROJET_fred project"
#LANGUAGES C Fortran
#)
#set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
#set(CMAKE_VERBOSE_MAKEFILE ON)
#if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU")
#endif()
#set(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++ ${CMAKE_CXX_FLAGS}")
#set(CMAKE_C_FLAGS "-static-libgcc ${CMAKE_C_FLAGS}")
#set(CMAKE_EXE_LINKER_FLAGS "-Bstatic -static-libgcc -static-libstdc++ ${CMAKE_EXE_LINKER_FLAGS}")
#set(CMAKE_MODULE_LINKER_FLAGS "-static-libgcc -static-libstdc++ ${CMAKE_MODULE_LINKER_FLAGS}")
#set(CMAKE_C_STANDARD_LIBRARIES "-static-libgcc -static-libstdc++ ${CMAKE_CSS_STANDARD_LIBRARIES}")
#add_compile_options(-static -fPIC -ffloat-store -ffinite-math-only -static -O )
# SET(CMAKE_Fortran_COMPILER
# "D:\ftarroux\scoop\apps\perl\current\c\bin\gfortran.exe")
#add_link_options(-static-libgcc -static-libstdc++)
#set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ ${CMAKE_SHARED_LINKER_FLAGS}")
file(
GLOB
source_ckio
...
)
file(
GLOB
fortran_sources2
...
)
file(
GLOB
source_c_2
... )
add_library(ck_io STATIC ${source_ckio})
target_compile_options(ck_io PRIVATE -DPROCESSOR_REG_SIZE=8 -DBIG_ENDIAN)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
target_compile_definitions(ck_io PRIVATE LINUX)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
target_compile_options(ck_io PRIVATE -fPIC)
endif()
endif()
add_library(PROJET_fred_lib_fortran STATIC ${fortran_sources2})
target_link_libraries(PROJET_fred_lib_fortran PRIVATE ck_io)
#target_link_libraries(PROJET_fred_lib_fortran PRIVATE ck_io -static-libgcc -static-libstdc++)
target_include_directories(
PROJET_fred_lib_fortran
PRIVATE ....
)
#if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU")
#target_compile_options(PROJET_fred_lib_fortran PRIVATE -static -static-libgcc -static-libstdc++
#)
#endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
target_compile_options(PROJET_fred_lib_fortran PRIVATE -fPIC)
endif()
endif()
if(MINGW)
set(CMAKE_Fortran_FLAGS "-O2 -std=legacy ")
endif(MINGW)
if(WIN32)
set_target_properties(
PROJET_fred_lib_fortran PROPERTIES COMPILE_DEFINITIONS
WIN32
)
endif(WIN32)
#add executable PROJET_fred
add_executable(PROJET_fred ${source_c_2} ./main.c)
#target_link_libraries(PROJET_fred PRIVATE PROJET_fred_lib_fortran ck_io -static-libgcc -static-libstdc++)
target_link_libraries(PROJET_fred PRIVATE PROJET_fred_lib_fortran ck_io)
target_include_directories(
PROJET_fred
PRIVATE ...
)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
target_compile_definitions(PROJET_fred PRIVATE LINUX)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
target_compile_options(PROJET_fred PRIVATE -fPIC)
endif()
endif()
#add total PROJET_fred lib
add_library(PROJET_fred_lib STATIC ${source_c_2})
target_link_libraries(PROJET_fred_lib PROJET_fred_lib_fortran ck_io)
#target_link_libraries(PROJET_fred_lib PROJET_fred_lib_fortran ck_io -static-libgcc -static-libstdc++ -static)
target_include_directories(
PROJET_fred_lib
PRIVATE ....
)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
target_compile_definitions(PROJET_fred_lib PRIVATE LINUX)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
target_compile_options(PROJET_fred_lib PRIVATE -fPIC)
endif()
endif()
if(MINGW)
if(CMAKE_BUILD_TYPE MATCHES Debug)
message("debug mode")
#target_compile_options(PROJET_fred_fred2 PRIVATE -Q -v -da -g -lSegFault )
add_custom_command(
TARGET PROJET_fred
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/PROJET_fred.exe
${CMAKE_SOURCE_DIR}/PROJET_fred_original_debug.exe
)
else()
add_custom_command(
TARGET PROJET_fred
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/PROJET_fred.exe
${CMAKE_SOURCE_DIR}/PROJET_fred_original_release.exe
)
endif(CMAKE_BUILD_TYPE MATCHES Debug)
endif(MINGW)