Запуск двоичных файлов, скомпилированных в RHEL 7 gcc 4.7 в RHEL 6

У меня есть куча библиотек, созданных в RHEL 7 с использованием gcc 4.7. Возможно ли следующее

1) Can the binary be executed in RHEL 6 host without re-compiling ? 

2) The shared objects produced in RHEL 7 hosts with gcc 4.7 be used 
on a RHEL 6 with gcc 4.4 compiler ?

Какие здесь оговорки?


person KodeWarrior    schedule 20.09.2016    source источник


Ответы (2)


Если вы не будете связывать свой двоичный файл статически, ваша проблема будет связана с общими библиотеками:

gcc обычно связывает программы C с:

  • glibc -- реализация для библиотеки времени выполнения C. RHEL 6 и 7 имеют разные версии этой библиотеки. glibc использует теги символов, т.е.:

    myaut@panther:/tmp> readelf -s /lib64/libc.so.6 | grep ' open@'
    1679: 00000000000d8a70    90 FUNC    WEAK   DEFAULT   12 open@@GLIBC_2.2.5
    

    Поэтому, если ваша программа со ссылкой на функцию имеет более новый тег, присутствующий в RHEL6, вы не сможете запустить свою программу.

  • libgcc_s - это среда выполнения GCC, которая в основном содержит функции, недоступные на аппаратной платформе (т. е. 32-битные двоичные файлы не поддерживают 64-битную long long арифметику, поэтому для этого им требуется библиотека), но это кажется необязательным.

Наконец, GCC 4.4 и 4.7 имеют совместимые ABI, поэтому у вас не должно возникнуть проблем из-за разных компиляторов.

person myaut    schedule 20.09.2016

Если вы используете компилятор GCC, включенный в набор инструментов разработчика Red Hat, RH гарантирует, что приложение, скомпилированное в основной версии RHEL, также будет работать в версии +1, например, скомпилированное в RHEL 6 и запущенное в RHEL 6 или 7.

Есть v4, но также есть GCC 5 и работа над 6.

См. http://developers.redhat.com/products/developertoolset/overview/.

person Mike Guerette    schedule 21.09.2016
comment
Как работает эта прямая совместимость? Означает ли это, что библиотеки статически связаны? - person Oz.; 03.03.2017