Я использую 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 на Центе ОС, как я могу скомпилировать этот проект со статической связью так, чтобы исполняемый файл мог работать независимо?
Спасибо за помощь!
Проверьте 64-битную версию против 32-битной - file(1)
здесь ваш друг. Затем проверьте, каких библиотек не хватает с помощью ldd(1)
.
Посмотрите на этот вопрос SO Qt static linking and deployment.
Может быть несколько причин, по которым ваш исполняемый файл не может работать. Однако сначала проверьте зависимости с помощью «ldd», чтобы получить подсказку.
В общем, это всегда плохая идея запускать исполняемый файл из одного дистрибутива на другом. Помимо архитектурных различий (32 и 64 бита) вы можете столкнуться с несовместимостью библиотек, изменениями ABI и другими интересными вещами. Вы можете избавиться от проблемы библиотек, скомпилировав статический двоичный файл, но это имеет и другие недостатки.
Вы должны рассматривать дистрибутивы как самостоятельные системы, независимо от того, что все они основаны на ядре Linux, и компилировать двоичные файлы для каждого из них, которые вы хотите поддерживать. OpenSUSE Build Factory может помочь вам, если ваша цель - предоставить двоичные пакеты.