В настоящее время у меня есть программа, которую я скомпилировал в x86_64, она опирается на довольно много библиотек, также скомпилированных в x86_64 (так что перекомпиляция их всех была бы большим проектом). Я хочу запустить i386 dylib, однако всякий раз, когда я загружаю его с помощью dlopen, я получаю сообщение об ошибке, говорящее, что он не был создан для моей архитектуры. Есть ли способ либо преобразовать i386 lib напрямую в x86_64 (у меня нет исходного кода для этого), либо запустить его на архитектуре x86_64?

0
user293895 27 Авг 2011 в 10:23

3 ответа

Лучший ответ

Вы не можете загрузить библиотеку i386 в исполняемый файл x86_64.

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

Вы можете перекомпилировать весь свой код для i386 и использовать библиотеку.

3
Mat 27 Авг 2011 в 06:30

Вы не можете загрузить 32-битную (i386) библиотеку (dylib) в 64-битный (x86_64) процесс и наоборот.

Машина может запускать 32-битные или 64-битные процессы; чего вы не можете сделать, так это смешать 32-битный и 64-битный код в одном процессе.

2
David Heffernan 27 Авг 2011 в 07:25

Если эта библиотека незаменима, вы не можете ее перекомпилировать и вам действительно нужно, чтобы остальная часть программы была x86_64, вы можете запустить ее в отдельном процессе и использовать некоторую форму IPC для вызова кода и передачи результатов.
Однако во многих случаях может быть проще переписать библиотеку или заменить ее чем-то другим, выполняющим аналогичную работу.

2
Torp 27 Авг 2011 в 08:16