cpan安装的DBD :: mysql在测试和符号未找到时失败.OSX Mojave

Har*_*ern 2 perl cpan dbd-mysql macos-mojave

这看起来已经存在多年了 - 但是我找不到最新的和Mac相关的东西,只处理只安装CPAN模块DBD :: mysql我已经在网上搜索了好几天...

#   Failed test 'use DBD::mysql;'
#   at t/00base.t line 15.
#     Tried to use 'DBD::mysql'.
#     Error:  Can't load '/Users/robert/.cpanm/work/1542100720.91387/DBD-mysql-4.048/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/Users/robert/.cpanm/work/1542100720.91387/DBD-mysql-4.048/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Symbol not found: _mysql_affected_rows
#   Referenced from: /Users/robert/.cpanm/work/1542100720.91387/DBD-mysql-4.048/blib/arch/auto/DBD/mysql/mysql.bundle
#   Expected in: flat namespace
#  in /Users/robert/.cpanm/work/1542100720.91387/DBD-mysql-4.048/blib/arch/auto/DBD/mysql/mysql.bundle at /usr/local/Cellar/perl/5.28.0/lib/perl5/5.28.0/darwin-thread-multi-2level/DynaLoader.pm line 197.
# ^@ at t/00base.t line 15.
# Compilation failed in require at t/00base.t line 15.
# BEGIN failed--compilation aborted at t/00base.t line 15.
Bailout called.  Further testing stopped:  Unable to load DBD::mysql
FAILED--Further testing stopped: Unable to load DBD::mysql
make: *** [test_dynamic] Error 255
-> FAIL Installing DBD::mysql failed. See /Users/robert/.cpanm/work/1542100720.91387/build.log for details. Retry with --force to force install it.
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的cpanm系列.

sudo cpanm  --configure-args="--libs='-L/usr/local/opt/openssl/lib -L/usr/local/lib -L/usr/local/Cellar/mysql/8.0.12/lib' --cflags='-I/usr/local/opt/openssl/include -I/usr/local/include/mysql -I/usr/local/Cellar/mysql/8.0.12/include/mysql'" DBD::mysql
Run Code Online (Sandbox Code Playgroud)

我已经用Homebrew安装了mysql,以及其他所有内容.我甚至将一些lib复制到系统目录中 - 但似乎没有什么可以让这个cpan模块安装和工作.

编辑:此行之后的添加.让我们试试手工制作包装

sudo perl Makefile.PL --libs="-L/usr/local/opt/openssl/lib -L/usr/local/lib -L/usr/local/Cellar/mysql/8.0.12/lib -lssl -lcrypto"
Run Code Online (Sandbox Code Playgroud)

制作的结果.看起来不错.我在这里看到没有错误.显然所有的库都可用于编译.

zeus:DBD-mysql-4.048-0 robert$ sudo perl Makefile.PL --libs="-L/usr/local/opt/openssl/lib -lssl -lcrypto -L/usr/local/lib -L/usr/local/Cellar/mysql/8.0.12/lib"
I will use the following settings for compiling and testing:

  cflags        (mysql_config ) = -I/usr/local/Cellar/mysql/8.0.12/include/mysql
  embedded      (guessed      ) = 
  libs          (User's choice) = -L/usr/local/opt/openssl/lib -lssl -lcrypto -L/usr/local/lib -L/usr/local/Cellar/mysql/8.0.12/lib
  mysql_config  (Users choice ) = mysql_config
  nocatchstderr (default      ) = 0
  nofoundrows   (default      ) = 0
  nossl         (default      ) = 0
  testdb        (User's choice) = test
  testhost      (default      ) = 
  testpassword  (default      ) = 
  testport      (default      ) = 
  testsocket    (default      ) = 
  testuser      (User's choice) = root

To change these settings, see 'perl Makefile.PL --help' and
'perldoc DBD::mysql::INSTALL'.

Checking if libs are available for compiling...
Looks good.

Checking if your kit is complete...
Looks good
Using DBI 1.642 (for perl 5.028000 on darwin-thread-multi-2level) installed in /usr/local/Cellar/perl/5.28.0/lib/perl5/site_perl/5.28.0/darwin-thread-multi-2level/auto/DBI/
Generating a Unix-style Makefile
Writing Makefile for DBD::mysql
Writing MYMETA.yml and MYMETA.json
zeus:DBD-mysql-4.048-0 robert$ 
Run Code Online (Sandbox Code Playgroud)

现在让我们看看make是否有效.

看起来不错.关于WIDEST_UTYPE的1个警告,但它只是一个警告......

然后,创建了mysql.bundle

chmod 755 blib/arch/auto/DBD/mysql/mysql.bundle
Manifying 3 pod documents
Run Code Online (Sandbox Code Playgroud)

好的,现在是重大考验.做测试.

......它失败了.

zeus:DBD-mysql-4.048-0 robert$ sudo make test
"/usr/local/Cellar/perl/5.28.0/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- mysql.bs blib/arch/auto/DBD/mysql/mysql.bs 644
PERL_DL_NONLAZY=1 "/usr/local/Cellar/perl/5.28.0/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00base.t .............................. 1/6 
#   Failed test 'use DBD::mysql;'
#   at t/00base.t line 15.
#     Tried to use 'DBD::mysql'.
#     Error:  Can't load '/Users/robert/.cpan/build/DBD-mysql-4.048-0/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/Users/robert/.cpan/build/DBD-mysql-4.048-0/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Symbol not found: _mysql_affected_rows
#   Referenced from: /Users/robert/.cpan/build/DBD-mysql-4.048-0/blib/arch/auto/DBD/mysql/mysql.bundle
#   Expected in: flat namespace
#  in /Users/robert/.cpan/build/DBD-mysql-4.048-0/blib/arch/auto/DBD/mysql/mysql.bundle at /usr/local/Cellar/perl/5.28.0/lib/perl5/5.28.0/darwin-thread-multi-2level/DynaLoader.pm line 197.
#  at t/00base.t line 15.
# Compilation failed in require at t/00base.t line 15.
# BEGIN failed--compilation aborted at t/00base.t line 15.
Bailout called.  Further testing stopped:  Unable to load DBD::mysql
FAILED--Further testing stopped: Unable to load DBD::mysql
make: *** [test_dynamic] Error 255
Run Code Online (Sandbox Code Playgroud)

......就在那里.同样的错误.现在我也尝试了MariaDB - 相同的结果,虽然略有不同的错误消息.

我在这里想念的是什么

Har*_*ern 10

所以我终于找到了它.当然,它正在定位库并正确包含文件.

所以我进入了我系统的cpan目录

/Users/robert/.cpan/build/DBD-mysql-4.048-0
Run Code Online (Sandbox Code Playgroud)

在检查了brewss和mysql的brew安装位置之后,我醒了.

sudo perl Makefile.PL --libs="-L/usr/local/opt/openssl/lib -lssl -lcrypto -L/usr/local/lib -L/usr/local/Cellar/mysql/8.0.12/lib -lmysqlclient"
Run Code Online (Sandbox Code Playgroud)

现在.这工作是因为在查看mysaql lib目录后,我看到该库是'mysqlclient'而不是mysql.如上所述.

现在,这可以像上面那样使用Makefile.PL.

然后'make'工作了.如上.没有显示任何错误......如上所述

然后sudo让测试工作 - 这一次.

All tests successful.
Files=73, Tests=9, 11 wallclock secs ( 0.24 usr  0.15 sys +  8.25 cusr  1.23 csys =  9.87 CPU)
Result: PASS
Run Code Online (Sandbox Code Playgroud)

最后 - make install.工作

zeus:DBD-mysql-4.048-0 robert$ sudo make install
"/usr/local/Cellar/perl/5.28.0/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- mysql.bs blib/arch/auto/DBD/mysql/mysql.bs 644
Manifying 3 pod documents
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/Cellar/perl/5.28.0/lib/perl5/site_perl/5.28.0/darwin-thread-multi-2level/auto/DBD/mysql/mysql.bundle
Installing /usr/local/Cellar/perl/5.28.0/lib/perl5/site_perl/5.28.0/darwin-thread-multi-2level/Bundle/DBD/mysql.pm
Installing /usr/local/Cellar/perl/5.28.0/lib/perl5/site_perl/5.28.0/darwin-thread-multi-2level/DBD/mysql.pm
Installing /usr/local/Cellar/perl/5.28.0/lib/perl5/site_perl/5.28.0/darwin-thread-multi-2level/DBD/mysql/INSTALL.pod
Installing /usr/local/Cellar/perl/5.28.0/lib/perl5/site_perl/5.28.0/darwin-thread-multi-2level/DBD/mysql/GetInfo.pm
Installing /usr/local/Cellar/perl/5.28.0/share/man/man3/Bundle::DBD::mysql.3
Installing /usr/local/Cellar/perl/5.28.0/share/man/man3/DBD::mysql::INSTALL.3
Installing /usr/local/Cellar/perl/5.28.0/share/man/man3/DBD::mysql.3
Appending installation info to /usr/local/Cellar/perl/5.28.0/lib/perl5/5.28.0/darwin-thread-multi-2level/perllocal.pod
zeus:DBD-mysql-4.048-0 robert$ pwd
/Users/robert/.cpan/build/DBD-mysql-4.048-0
Run Code Online (Sandbox Code Playgroud)

好吧,最后.我为什么要这个?我不记得了.