Как скомпилировать программу на linux edge linux для запуска на старом linux - PullRequest
0 голосов
/ 04 мая 2018

Я использую установщик Arch Linux с Linux Mint 18.1, загруженным по дуэли. В моем колледже у нас установлены lubuntu 16.04 и Ubuntu 14.04. Я также включил тестирование репозиториев в Arch Linux, поэтому я получаю более новые пакеты, поэтому при компиляции любой программы C ++ в Arch она не будет работать в Linux Mint, поскольку версии общих библиотек не совпадают в mint.

как libMango.so.64 в архиве, а libMango.so.60 в монетном дворе. Как мне с этим побороть?

поэтому я спрашиваю, как я могу скомпилировать любой C / C ++ с новым компилятором и общими библиотеками, чтобы нормально работать со старыми общими библиотеками ? Так же, как я компилирую 32-битные программы на 64-битной машине с флагом -m32, есть ли флаг для старых общих библиотек?

Я использую GCC 8.1.

1 Ответ

0 голосов
/ 04 мая 2018

как я могу скомпилировать любой C / C ++ с новым компилятором и общими библиотеками, чтобы нормально работать со старыми общими библиотеками?

Вы не можете сделать это надежно, если API (или даже ABI , включая размер и выравнивание внутренних структур, смещения полей, vtables организация) этих библиотек изменилась несовместимо.

В общем, вам лучше перекомпилировать исходный код на другом компьютере (и ваш колледж может запретить это, если этот источник не связан с вашим образованием). Кстати, если ваш исходный код находится в каком-либо репозитории git (например, github , если он с открытым исходным кодом), перенос на несколько компьютеров очень прост.

Некоторые очень немногие библиотеки предпринимают подлинные (и документированные) усилия по обеспечению совместимости с другими их версиями в двоичном виде (например, на уровне ABI), но это не обычно. Традиционное бесплатное программное обеспечение Unix и заботится о совместимости на уровне исходного кода. А стандарт POSIX заботится только о совместимости с источниками.

Вы можете рассмотреть возможность использования некоторой среды chroot (см. chroot (2) и path_resolution (7) & учетные данные (7) ) чтобы иметь основные части вашего старого дистрибутива на вашем новом. Подробности зависят от дистрибутива (в Debian и Ubuntu см. Также schroot и debootstrap ). Вы также можете запустить полный дистрибутив на некоторых виртуальных машинах или использовать контейнеры в стиле Docker.

И вы можете попытаться связать (локально) свой исполняемый файл статически, поэтому скомпилируйте и свяжите с g++ -static

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...