Как запустить программу C++, которая была скомпилирована в другой Linux ОС

Есть программа написанная на С++, скомпилированная в другой Linux ОС.

(Ubuntu BusinessPack 18.04 UALinux Release: 18.04):

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

int main()
{
   std::cout << "TEST BUILDS" << std::endl;
   return 0;
}

Компиляцию делал так:

Среда разработки: Code Blocks 16.01 , компилятор: GNU GCC Compiler - без флагов.

Настройки компиляции в Code Blocks

После компиляции, исполняемый файл был перенесен на другую Linux ОС.

(CentOS Linux release 7.6.1810 (Core) Kernel Version): 3.10.0-957.1.3.el7.x86_64)

При запуске ничего не выводит, ошибок нету. Выставление прав на бинарник не помогло.

Как скомпилировать, чтобы при переносе исполняемого файла на другую Linux ОС программа работала.

Желательно без использования сторонних библиотек и без работы с API ОС.


Ответы (2 шт):

Автор решения: eri

Для сборки переносимого приложения лучше всего использовать -static. Приложение будет включать все зависимости внутри одного файла.

Динамическая сборка будет работать на более новых линуксах, на которых версия glibc выше или совпадает. Остальные зависимости можно положить рядом с исполняемым файлом. Проверить зависимости можно через программу ldd.

Для питона есть проект manylinux - это набор докер образов с допиленной glibc, Собранный в контейнере код запустится почти везде. Тут несложно войти в контейнер и запустить сборку-ликовку сишного кода в нем

→ Ссылка
Автор решения: Serg St

При переносе на другой Linux, важно чтобы там версия библиотеки glibc была равной или больше.

А у вас компиляция идёт на glibc 2.27 (ubuntu 18.04), а на CentOS 7 она 2.17, поэтому код с большой вероятностью не заработает.

Обычно для наибольшей переносимости стараются релиз компилировать на самом старом Linux с минимальной glibc, а дальше он обычно без проблем запускается на более свежих версиях дистрибутивов.

P.S. Хотя ради интереса я попробовал ваш код запустить на CentOS-7 после компиляции на Ubuntu 18.04, и он отработал! Не знаю, почему лично у вас не получилось.

→ Ссылка