Двоичный файл из одного Linux в другой - PullRequest
1 голос
/ 05 июня 2011

Есть ли какой-нибудь возможный способ запуска двоичного кода, скомпилированного на другом Linux?Я знаю, что, конечно, проще всего восстановить его на другой машине, но давайте предположим, что единственное, что мы можем получить, это двоичный файл, так это возможно или нет?(Я знаю, что, вероятно, это будет нелегко, но мне просто любопытно).

Ответы [ 3 ]

2 голосов
/ 05 июня 2011

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

2 голосов
/ 05 июня 2011

Хотя сопоставление разделяемых библиотек очень верно (используйте ldd, чтобы получить список разделяемых библиотек, которые должны быть идентичными) в более общем плане, система должна быть той же архитектуры (или иметь библиотеки совместимости / ядра, установленные для исполняемые файлы x86 на архитектурах x86_64).

Одним из вариантов является статическое связывание (или предоставление собственных общих библиотек), чтобы вам была нужна совместимость только на уровне ABI ядра. Конечно, это означает, что системы / дистрибутивы, использующие нестандартные опции (NIS, LDAP и т. Д.), Вроде как запутались.

Другим вариантом является распространение файлов .a и выполнение окончательного связывания в целевой системе. Это, конечно, предполагает, что система имеет компилятор, но, вероятно, является наиболее переносимым для распределения объектов.

Однако во всех случаях у вас должна быть совместимость с архитектурой. x86 - самый низкий общий знаменатель, но ни в коем случае не единственный.

1 голос
/ 05 июня 2011

Если версии libc одинаковы и доступны любые другие зависимые разделяемые библиотеки, тогда да, вы можете запускать двоичные файлы из других Linux. Используйте 'ldd -v' в двоичном файле на целевой платформе, чтобы увидеть, отсутствуют ли какие-либо библиотеки.

...