Включить библиотеки mingw в скомпилированный файл

Я использую cmake для создания проекта Eclipse CDT MinGW. (Версия Затмения Кеплера)

Это мой Cmakelist:

project(IMGTODICOM)

find_package(ITK REQUIRED)

include(${ITK_USE_FILE})

add_executable(IMGTODICOM IMGTODICOM.cxx)

target_link_libraries(IMGTODICOM ITKReview ${ITK_LIBRARIES})

Код компилируется и работает без проблем на моем компьютере, но на другом ПК он не запускается. Требуются некоторые dll, такие как libgcc_s_dw2-1.dll. Я искал эту dll на своем компьютере и нашел ее в C:\MinGW\bin. Чтобы решить проблему, я скопировал содержимое этой папки на другой компьютер, и exe-файл наконец запустился. Однако мне интересно, есть ли лучший способ запустить исполняемый файл на любом компьютере с Windows, добавив эти библиотеки в процесс компиляции.

Я читал, и я должен сделать так, чтобы компилятор ссылался на статическую библиотеку. В Eclipse я попытался добавить dll в свойства> C/C++, включить путь и символы и в проект «Путь»> «Библиотеки», но это не работает. Я пытался изменить CmakeList, но он также не работает.

Я не знаю, почему эта проблема и как я могу включить содержимое C:\MinGW\bin в exe-файл.

Большое спасибо за любую помощь


person Hank81    schedule 18.10.2013    source источник


Ответы (1)


Да, есть способ. Для чистого кода C:

set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static")

Для кода С++:

set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
person Alexander Shukaev    schedule 18.10.2013
comment
Да, Вилен Данк. Он отлично работает, и ваш ответ понятен и полезен - person Hank81; 04.11.2013
comment
Только что попробовал вариант С++ этого. Запустив DLL через обходчик зависимостей, я все еще вижу зависимости от LIBGCC_S_DW2-1.DLL и LIBSTDC++-6.DLL. Не кажется универсальным решением - person Stewart; 17.08.2017
comment
Какой компилятор и какой артефакт вы собрали? Это DLL, которую вы создаете, или исполняемый файл? - person Alexander Shukaev; 17.08.2017