Загрузка dylib из другой архитектуры - PullRequest
0 голосов
/ 27 августа 2011

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

Ответы [ 3 ]

3 голосов
/ 27 августа 2011

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

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

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

2 голосов
/ 27 августа 2011

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

2 голосов
/ 27 августа 2011

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

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

...