Что может сделать 32-битное приложение несовместимым с 64-битной ОС Linux? - PullRequest
1 голос
/ 01 июля 2010

Кажется, что большинство 32-битных приложений будут работать на 64-битной Linux, если все 32-битные библиотеки присутствуют. Но мне кажется, что могут быть проблемы с архитектурно-зависимыми функциями, и здесь я думаю о сигналах и setjmp / longjmp. Мне интересно, может ли кто-то с большим опытом прокомментировать, какие функции (если таковые имеются) могут привести к несовместимости 32-битного приложения с 64-битной ОС.

Ответы [ 5 ]

6 голосов
/ 01 июля 2010

Даже setjmp и longjmp должны работать правильно.Никаких особых проблем со стороны пользовательского пространства приложения, которые будут представлять какие-либо проблемы.Фактическая 32-битная эмуляция выполняется процессором.Системные вызовы являются интерфейсом к 64-битному ядру, которое Linux правильно обрабатывает.

Если приложение было злым и отправляло исполняемый код другому 64-битному процессу для выполнения, то различные вещи могли бы сломаться.

3 голосов
/ 01 июля 2010

Самая большая проблема для 32-битных приложений, работающих в 64-битных системах, заключается в том, что программисты ошибочно делают предположения о целочисленной длине или длине указателя и впоследствии делают непереносимые вещи с ними. В этой статье от Sun

есть довольно хороший обзор проблем для программистов на C / C ++.
1 голос
/ 05 июля 2010

На самом деле есть только две проблемы, которые возникают при запуске 32-битных приложений под 64-битным Linux, при условии, что у вас есть необходимые 32-битные библиотеки:

  • Некоторые ioctl() с для менее используемых драйверов не работают правильно при использовании 32-разрядным пользовательским процессом в 64-разрядном ядре;

  • Приложения с жестко закодированными путями /usr/lib и / или /lib для поиска динамических библиотек не будут работать, если 32-битные библиотеки расположены в другом месте.

1 голос
/ 01 июля 2010

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

0 голосов
/ 01 июля 2010

Давайте рассмотрим пример 32-битного приложения, которое имеет основной модуль и загружает 32-битную зависимую DLL.Если вы переносите как основной модуль, так и 32-битную зависимую библиотеку DLL, приложение отлично работает на 64-битной машине.Но в случае, если вы перенастроите только основной модуль, он не сможет загрузить 64-битную зависимую dll с 64-битной машины, даже если она присутствует.Причины -

  1. Различное выравнивание в памяти данных

  2. Различия в размере типа данных

Пожалуйста, обратитесь:

http://dev -faqs.blogspot.com / 2008/03 / accessing-32-bit-dlls-from-64-bit-code_02.html

http://dnjonline.com/article.aspx?ID=jun07_access3264

Возможно, это то, что вы ищете!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...