Связывание 32-битной библиотеки с 64-битной программой - PullRequest
17 голосов
/ 22 декабря 2009

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

Ответы [ 3 ]

28 голосов
/ 22 декабря 2009

Нет. Вы не можете напрямую ссылаться на 32-битный код внутри 64-битной программы.

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

5 голосов
/ 22 декабря 2009

Пример использования IPC для запуска 32-битных плагинов из 64-битного кода приведен в открытом коде NSPluginWrapper .

4 голосов
/ 22 декабря 2009

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

Это подтверждение концепции техники.

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

В большинстве случаев, я полагаю, что два процесса, а затем IPC между ними могут быть самыми простыми, как и предполагалось в противном случае.

...