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

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

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

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

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

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

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

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

Я пытался добавить "-статический" флаг на .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 на Центе ОС, как я могу скомпилировать этот проект со статической связью так, чтобы исполняемый файл мог работать независимо?

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

6
задан Claire Huang 26 May 2010 в 00:44
поделиться

3 ответа

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

Edit:

Посмотрите на этот вопрос SO Qt static linking and deployment.

4
ответ дан 16 December 2019 в 21:35
поделиться

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

2
ответ дан 16 December 2019 в 21:35
поделиться

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

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

2
ответ дан 16 December 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: