LINUX.ORG.RU

собрать программу для старого linux без компилятора

 


1

2

Посоветуйте что почитать или просто порекомендуйте на что обратить внимание: нужно статически собрать проект на C++ для машин с операционными системами CentOS5 (или ниже, пока мне не изветно) без библиотек C++ (устанавливать библиотеки нельзя), имея в распоряжени современный Linux с 3 ядром. Приложение использует библиотеку STL.

P.S. просто есть подозрения, что только ключиком -static не удасться так вот просто обойтись

компили, где можно все

anonymous
()

в зависимости от сложности/размера проекта — все может быть до невозможности просто, или до невозможности сложно.

в простейшем случае, достаточно поставить на другой комп такую же центось, и собрать на ней, линкуя статиком все что можно. то что нельзя - кинуть в папку с бинарями, и добавить в LD_LIBRARY_PATH.

имея в распоряжени современный Linux с 3 ядром

это тоже возможно, но есть вероятность что придется переписать все makefiles, и знатно поиметь секас с зависимостями.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)

Почему именно центось5?

anonymous
()

сорри, мне надо было уходить, не смог написать подробности.

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

основные проблемы:

glibc: если использовать новый — он может не запуститься на старом линуксе. если использовать старый — он может не собраться на новом компиляторе.

C++ ABI: в старой центоси, наверняка отличается. поэтому все депенды на крестах придется тащить с собой, и собирать одинаковым компилятором.

зависимости: неизвестно, какие функции ядра и glibc им нужны. я так понимаю, сам софт скорее новый, чем старый.

в любом случае, придется компилировать все начиная с glibc, используя linux-headers от той старой центоси.

если программа очень большая и сложная — сложность будет примерно как собрать LFS.

waker ★★★★★
()

есть и альтернативный вариант использовать ту glibc что есть, и линковаться к ней динамически, используя старые реализации функций через symver. но это годится только для относительно маленьких проектов, и уж точно не для крестовых.

waker ★★★★★
()
Ответ на: комментарий от wakuwaku

вендовенько.

ты если знаешь другое решение — пиши, не стесняйся блеснуть знаниями.

зачем, если можно поправить rpath?

наверное, можно и так — я пишу то что лично сам пробовал, и уверен что оно работает. rpath править не пробовал.

waker ★★★★★
()

кстати, cast ZenitharChampion

он вроде постоянно подобными сборочками занимается, хоть и не для центоси, но может быть что-то дельное подскажет.

waker ★★★★★
()

Поставь целевое центосное окружение в chroot: всего-то нужны glibc и gcc/g++. Ни в коем случае не слушай мудаков, которые ради такого плевого дела предлагают сношаться с виртуалками: они просто мудаки с атрофированным мозгом.

anonymous
()

Установи CentOS 5.11 в виртуальную машину. Выдели виртуальной машине 2 Гб памяти и 32 Гб образ диска. После успешной установки, установи обновления. Первый этап пройден.

Найди в интернете инструкцию по установке репозитория devtoolset. В нём есть GCC 4.7, 4.8 и 4.9. Лично я пользуюсь только 4.7, потлму что мне хватает.

Когда всё заработает (и твой gcc --version выдаст GCC 4.7.2) попробуй компилировать. Обо всех вопросах пиши сюда, я попробую ответить!

В играх из Humble Bundle библиотеки не устанавливают в систему, а таскают в архиве с игрой. Несложный скрипт run.sh подцепляет их. Чаще всего «таскают с собой» libstdc++.so.6, C++ Runtime. В GCC из репозитория devtoolset эта пробелма решена: даже собранная с новым компилятором программа хочет старый C++ Runtime. Как они это сделали я не знаю, но мой Qt 5.4, котоырй я скомпилировал в CentOS 5, хочет Glibc 2.4 и C++ Runtime из GCC 4.1!

ZenitharChampion ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.