Почему _mysql.co, скомпилированный на одном Mac, не работает на другом?

0

Я хочу использовать библиотеку Python-MySQLDB на Mac, поэтому я скомпилировал исходный код для получения _mysql.so под Mac10.5 с помощью Intel iMac (i386)

Этот _mysql.co работает в 2 моих iMac и другом Macbook. Но это не работает на других компьютерах Mac.

Означает ли это, что какая-то конкретная информация о компьютере была скомпилирована в файл?

Теги:
compilation

2 ответа

1
Лучший ответ

Выполните проверку file в отношении файла _mysql.so:

% file _mysql.so
_mysql.so: Mach-O 64-bit bundle x86_64

Убедитесь, что он скомпилирован для правильной архитектуры на компьютерах Mac, на которых он не работает. Если вы пытаетесь использовать его на любых компьютерах PowerPC (PPC), вам нужно будет повторно скомпилировать MySQLDB как универсальный двоичный файл.

Например, универсальный двоичный файл (например, предустановленная версия Python) будет выглядеть так:

% file /usr/bin/python
/usr/bin/python: Mach-O universal binary with 3 architectures
/usr/bin/python (for architecture x86_64):      Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):        Mach-O executable i386
/usr/bin/python (for architecture ppc7400):     Mach-O executable ppc

Итак, чтобы ответить на ваш вопрос: Да, похоже, что вы могли скомпилировать модуль без поддержки Universal, однако я не могу ответить на это окончательно без дополнительной информации.

  • 0
    _Mysql.so, который я скомпилировал, предназначен только для i386. И те iMac, у которых есть проблема, являются также архитектурой i386.
  • 0
    Хорошо! Итак, кроме просто не работает, какие ошибки вы получаете, когда вы пытаетесь импортировать модуль?
2

Если вы только создали одну архитектуру (i386/PPC), то она не будет работать на Mac с противоположной архитектурой. Являются ли машины, которые не работают с PPC-машинами, случайно?

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

Вы можете узнать, какие архитектуры были построены с помощью команды "файл" в терминале.

(Кстати, вы имеете в виду ".so"? Я не знаком с файлами ".co".)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню