Не удается запустить исполняемый двоичный файл в другой системе Linux?

Я использую Ubuntu 10.04 и Qt4.6, и я создал исполняемый двоичный файл на своем компьютере через QtCreator.

теперь я хочу поместить свой исполняемый файл на CentOS 5, но кажется, что этот исполняемый файл не может работать на CentOS.

сообщение об ошибке

bash: ./[filename]: cannot execute binary file

теперь я знаю, что это происходит из 32-битной и 64-битной проблемы и успешно создает 32-битный exexutable файл.

однако этот исполняемый файл по-прежнему не может работать на CentOS из-за проблемы динамической связи он всегда показывает, что :

Error while loading shared libraries: libQtGUI.so.4: cannot open shared object file: No such file or directory

Я попытался добавить флаг "- static".pro файл

QMAKE_CFLAGS_RELEASE    += -Os -static
QMAKE_CPPFLAGS_RELEASE  += -Os -static
QMAKE_CXXFLAGS_RELEASE  += -Os -static
QMAKE_CCFLAGS_RELEASE   += -Os -static

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

Я также попытался добавить следующую строку .pro файл:

QMAKE_LFLAGS += static

но этот проект не может компилироваться после этого. У меня нет разрешения на установку Qt на Cent OS, как я могу это скомпилировать проект со статической связью, чтобы исполняемый файл мог работать независимо?

Спасибо за вашу помощь!

3 ответов


Проверьте 64-бит против 32-бит -file(1) здесь твой друг. Затем проверьте, какие библиотеки отсутствуют с ldd(1).

Edit:

взгляните на этот вопрос так Qt статическое связывание и развертывание.


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


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

вы должны рассматривать дистрибутивы как собственные системы, независимо от того, что все они основаны на ядре Linux, и компилировать двоичные файлы для каждого из тех, кого вы хотите поддержать. Фабрика сборки OpenSUSE может помочь вам, если ваша цель-предоставить двоичные пакеты.