Необходимо под Linux системой (Ubuntu 17) собрать проект с использованием cmake.
Как можно это реализовать, и если это недопустимо, то как это добиться успеха используя какой-нибудь кросс-компилятор (например, mingw), если нужно при этом подключить библиотеки. С использованием mingw возникли проблемы, при запуске полупустого проекта возникает ошибка "Отсутствие библиотеки libstdc++6..."
Если Ваш проект чисто собирается под линуксом и у Вас установлен mingw32 или mingw64, сделайте следующее:
1) создайте отдельный каталог для сборки проекта под виндовсы в каталоге, где- лежит Ваш CMakeLists.txt и зайдите в него
$ mkdir mingw && cd mingw
2) запустите генератор, который создаст Makefie-иерархию для кросс-компилятора mingw
$ cmake -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw32.cmake ..
или
$ cmake -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw64.cmake ..
(Путь к тулчейну отредактируйте как нужно в Вашей системе)
3) запустите сборку
$ make
4) если все прошло как надо, проверьте работу под wine
5) если под wine работает, соберите под виндовсы пакет с необходимым рантаймом -- для запуска под живыми виндовсами кроме самой программы нужно взять .dll-и, что лежат в /usr/x86_64-w64-mingw32/sys-root/mingw/bin или /usr/i686-w64-mingw32/sys-root/mingw/bin (Это у меня в федоре они там, где у Вас, не знаю -- посмотрите сами)
libatomic-1.dll
libgcc_s_seh-1.dll
libgsl-0.dll
libgslcblas-0.dll
libssp-0.dll
libstdc++-6.dll
libwinpthread-1.dll
Выберите из них те, на отсутствие которых ругается загрузчик при запуске вашей программы под виндовсами, и положите рядом с исполняемым файлом.
Для сборки, используя MSVC, нужно собирать под виндовсами. Процесс выглядит так:
1) Открываем cmd-среду из установленных в меню Программы при установке MSVCxx
2) переходим в каталог сборки (предполагаем, что он в создан каталоге, где лежит Ваш CMakeLists.txt)
3) запускаем cmake
> cmake ..
или указывая генератор явно, если рабочая платформа не целевая (кросскомпиляция)
> cmake -G "Visual Studio xx Win64" ..
Генератор создаст проект
Собираем проект
> msbuild project.vcxproj (или project.sln)
В CMakeLists.txt следует указать, что Вы не будете использовать _s() шлак, который MS ввела в свой компилятор с целью разрушения стандарта C++, поскольку адекватную реализацию его она осилить не в состоянии. Я использую следующее:
if (MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMT")
add_definitions(/W4 /wd4512 /wd4702 /wd4100 /wd4510 /wd4355 /wd4127)
add_definitions(/D _CRT_SECURE_NO_WARNINGS)
elseif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUC)
add_definitions(-Wall -W)
else ()
message ("Unknown compiler")
endif ()
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть win проект на c++, который нужно перенести на linuxПервым шагом было решено перейти с солюшенов студии на CMake
Есть консольная программа, которая записывает в файл в бинарном формате таблицу или считывает ее же из бинарного файлаДля того чтобы записать...