32-битный 64-битный совместимый - PullRequest
1 голос
/ 28 августа 2009

Я занимаюсь разработкой приложения, которое будет работать на 64-разрядных компьютерах.

Однако мы используем библиотеку с 32-битными целыми числами, которую мы не можем изменить. И нам нужно будет скомпилировать и запустить на 64-битном компьютере.

Каковы будут последствия при запуске приложения? Есть ли работа вокруг?

Большое спасибо за любой совет,

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Я предполагаю, что вы имеете в виду x86 и x86_64, когда говорите о 64-битном.

int является 32-разрядным на обеих этих архитектурах.

Единственная проблема, с которой вы склонны сталкиваться, это когда вы предполагаете:

  • sizeof(void*) == sizeof(int)
  • sizeof(int) == sizeof(long)
  • Размер long или long long такой же размер.

В противном случае вы будете в порядке.

1 голос
/ 29 августа 2009

У вас есть источник для библиотеки? Если это так, и вы перекомпилируете его, вам это может сойти с рук (если авторы библиотеки не делали предположений, которые нарушались при компиляции для x86-64). Испытай тяжело и проверь долго.

Если у вас нет источника (у вас просто скомпилированный двоичный файл i386), компоновщик даже не позволит вам связать с ним код x86-64. ABI просто не совместимы.

Во втором случае вам придется создать отдельный 32-битный вспомогательный процесс / обертка, который связывается с 32-битной библиотекой и принимает запросы на вызов библиотеки из 64-битного процесса через механизм IPC ( возвращая результаты). Вы можете создавать функции-оболочки на 64-битной стороне вокруг IPC, чтобы она выглядела как обычные вызовы библиотеки. Ваш 64-битный процесс должен будет запустить 32-битный вспомогательный процесс при запуске (и убедиться, что вспомогательный процесс знает, что он завершается при исчезновении родительского процесса).

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