Как мне исправить "Символ не найден: _is_prefix" при компиляции Perl DBD::mysql?

Сначала я хотел собрать пакет DBD:: mysql. Это продолжало давать сбой, потому что все, что привело к make, не могло быть загружено для тестов с Symbol not found: _is_prefix, Поэтому я предположил, что cpan может быть немного старым. Я знаю, что это случайное предположение, но cpan сказал мне установить последнюю версию Bundle:: CPAN.

Кто успешно установил DBD:: mysql или Bundle::CPAN в Mac OS X 10.5? Не могли бы вы порекомендовать что-нибудь, что я мог бы сделать по-другому?

 Это perl, v5.8.8, созданный для darwin-thread-multi-2level
(с 4 зарегистрированными патчами, смотрите perl -V для более подробной информации) 
 / usr / local / mysql / bin / mysql Ver 14.14 Distrib 5.1.36,
для apple-darwin9.5.0 (i386) с использованием readline 5.1 

Вот журнал вывода CPAN для DBD:: mysql:

Написание Makefile для DBD::mysql
cc -c  -I/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DBI -I/usr/local/mysql/include -DDBD_MYSQL_INSERT_ID_IS_GOOD -g  -arch ppc -arch i386 -g -pipe -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -Wdeclaration-after-Statement -I/usr/local/include -O3   -DVERSION=\"4.012\" -DXS_VERSION=\"4.012\"  "-I/System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE"   dbdimp.c
/usr/bin/perl -p -e "s/~DRIVER~/mysql/g" /Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DBI/Driver.xst > mysql.xsi Запуск Mkbootstrap для DBD::mysql ()
chmod 644 mysql.bs
/usr/bin/perl /System/Library/Perl/5.8.8/ExtUtils/xsubpp  -typemap /System/Library/Perl/5.8.8/ExtUtils/typemap  mysql.xs > mysql.xsc && mv mysql.xsc mysql.c
cp lib/DBD/mysql.pm blib/lib/DBD/mysql.pm
cp lib/DBD/mysql/GetInfo.pm blib/lib/DBD/mysql/GetInfo.pm
cp lib/DBD/mysql/INSTALL.pod blib/lib/DBD/mysql/INSTALL.pod
cp lib/Bundle/DBD/mysql.pm blib/lib/Bundle/DBD/mysql.pm
cp mysql.bs blib/arch/auto/DBD/mysql/mysql.bs
chmod 644 blib/arch/auto/DBD/mysql/mysql.bs Предупреждение: повторное определение функции 'do' обнаружено в mysql.xs, строка 225. Предупреждение: дублирующее определение функции 'rows' обнаружено в mysql.xs, line 650
cc -c  -I/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DBI -I/usr/local/mysql/include -DDBD_MYSQL_INSERT_ID_IS_GOOD -g  -arch ppc -arch i386 -g -pipe -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-строго-псевдонимы -Wdeclaration-after-Statement -I/usr/local/include -O3   -DVERSION=\"4.012\" -DXS_VERSION=\"4.012\"  "-I/System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE"   mysql.c
dbdimp.c: в функции 'mysql_describe':
dbdimp.c:3309: предупреждение: назначение из несовместимого указателя тип dbdimp.c: в функции 'mysql_describe':
dbdimp.c:3309: предупреждение: назначение из несовместимого указателя типа rm -f blib/arch/auto/DBD/mysql/mysql.bundle
LD_RUN_PATH="/usr/local/mysql/lib" /usr/bin/perl myld cc -mmacosx-version-min=10.5.7  -arch ppc -arch i386 -bundle -неопределенный dynamic_lookup -L/usr/local/lib dbdimp.o mysql.o  -o blib/arch/auto/DBD/mysql/mysql.bundle    \
       -L/usr/local/mysql/lib -lmysqlclient -lz -lm     \

chmod 755 blib/arch/auto/DBD/mysql/mysql.bundle Управление blib/man3/DBD::mysql.3pm Управление blib/man3/DBD::mysql::INSTALL.3pm Управление blib/man3/Bundle::DBD::mysql.3pm
  CAPTTOFU/DBD-mysql-4.012.tar.gz
  /usr/bin/make -j3 -j3 - ОК Выполнение make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00base.t .................. 1/6 Вызов спасения. Дальнейшее тестирование остановлено: не удалось загрузить DBD::mysql

# Неудачный тест 'use DBD::mysql;'
# в строке t / 00base.t 21.
# Пытался использовать 'DBD::mysql'.
# Ошибка: не удается загрузить '/Users/dlamblin/.cpan/build/DBD-mysql-4.012-4n3pv8/blib/arch/auto/DBD/mysql/mysql.bundle' для модуля DBD::mysql: dlopen(/ Пользователи /dlamblin/.cpan/build/DBD-mysql-4.012-4n3pv8/blib/arch/auto/DBD/mysql/mysql.bundle, 2): символ не найден: _is_prefix
# Ссылка с: /Users/dlamblin/.cpan/build/DBD-mysql-4.012-4n3pv8/blib/arch/auto/DBD/mysql/mysql.bundle
# Ожидается в: динамический поиск # в строке (eval 7) 2
# Сбой компиляции в требовании в строке 2 (eval 7).
# BEGIN fail - компиляция прервана в (eval 7) строке 2.
FAILED- дальнейшее тестирование остановлено: невозможно загрузить DBD::mysql
make: *** [test_dynamic] Ошибка 255
  CAPTTOFU/DBD-mysql-4.012.tar.gz
  /usr/bin/make test - NOT OK
// подсказка // чтобы увидеть результаты cpan-testers для установки этого модуля, попробуйте:
  reports CAPTTOFU/DBD-mysql-4.012.tar.gz Выполнение make install
  make make test вернулось плохое состояние, без принудительной установки не будет. Сбой при выполнении этой команды:
 CAPTTOFU/DBD-mysql-4.012.tar.gz: make_test NO 

6 ответов

Решение

Хорошо, если вы получите эти ошибки, я теперь знаю следующее:

  1. MySQL 5.1 for Mac OS X x86_64 не совместим с DBD::mysql (еще). Установить 32-битную x86 версия, и попробуйте еще раз. Вы добьетесь успеха. Я желаю perl Makefile.pl просто скажу вам, что в баннере.
  2. Bundle::CPAN были проблемы, потому что я не устанавливал как root. Почему это заставляет его сообщать циклические ссылки вместо проблем с разрешениями на установку, я никогда не пойму.

Пожалуйста, добавьте комментарий, если и когда это стало устаревшей информацией.

Установка (бета) 5.4.1 64-битной версии mysql, доступной на их веб-сайте разработчика, решает проблему. Проверено на снежном барсе.

Вы пытались установить Bundle:: DBD:: mysql?

Установка последней бета-версии 64-разрядной Mysql исправлена ​​проблема на моем компьютере.

Где жаловаться на круговую зависимость? Похоже, вы пытаетесь создать ссылку на несовместимую версию библиотек mysql. Символ, который он ищет, отсутствует в загруженной вами библиотеке. Я не думаю, что это проблема, вызванная CPAN.pm или сценарием cpan.

Некоторые вопросы:

  • Кто скомпилировал perl? Это Apple, Perl?
  • Кто скомпилировал mysql? Это ваша собственная версия, так как она находится в /usr/local?
  • Вы ранее компилировали другие версии? Я начинаю с компиляции, чтобы убедиться, что все указывает на правильные места.

Я не занимался этой проблемой, но обнаружил, что MacPorts убрал все проблемы с несовместимостью с UNIX. Возможно, вы захотите попробовать это, прежде чем перенести слишком много боли и страданий.

Другие вопросы по тегам