Не удается запустить исполняемый двоичный файл в другой системе 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 может помочь вам, если ваша цель-предоставить двоичные пакеты.