从node.js应用连接到mysql,错误:“dyld:lazy symbol binding failed:Symbol not found:_mysql_init”

我使用XAMPP的OSX 10.6.8和MySQL。

当我运行这个node.js应用程序(app.js)时:

var mysql = require('mysql-libmysqlclient'); var conn = mysql.createConnectionSync(); conn.connectSync('127.0.0.1', 'root', '', 'database_name'); 

我看到这个输出:

 Airs0urce:nodejs airs0urce$ node app.js dyld: lazy symbol binding failed: Symbol not found: _mysql_init Referenced from: /Applications/XAMPP/xamppfiles/htdocs/myproject/nodejs/node_modules/mysql-libmysqlclient/build/Release/mysql_bindings.node Expected in: dynamic lookup dyld: Symbol not found: _mysql_init Referenced from: /Applications/XAMPP/xamppfiles/htdocs/myproject/nodejs/node_modules/mysql-libmysqlclient/build/Release/mysql_bindings.node Expected in: dynamic lookup Trace/BPT trap 

Googlesearch之后已经尝试了一些解决scheme。 添加从XAMPP目录的MySQL库,包括path:

 export DYLD_LIBRARY_PATH=/Applications/XAMPP/xamppfiles/lib/mysql:$DYLD_LIBRARY_PATH 

试图用MacPorts安装mysql5-devel ,但没有运气,build设失败:

 Airs0urce:~ airs0urce$ sudo port install mysql5-devel ---> Computing dependencies for mysql5-devel ---> Building mysql5-devel Error: Target org.macports.build returned: shell command failed (see log for details) Log for mysql5-devel is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_databases_mysql5-devel/mysql5-devel/main.log Error: Status 1 encountered during processing. To report a bug, see <http://guide.macports.org/#project.tickets> 

有日志文件,如果你想看到: http : //dl.dropbox.com/u/1875424/main.log

这是因为Mac OS X Lion(10.7)上的configuration问题: lib/libmysqlclient.18.dylib (mysql 5.5及以上版本)。

步骤1:

确保你在~/.profile设置path

 export ARCHFLAGS=-arch x86_64 export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH 

第2步:

我正在使用rvm,所以我使用了下面的命令:

 rvmsudo ARCHFLAGS="-arch x86_64" gem install mysql2 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config --with-opt-lib=/usr/local/mysql/lib 

解决了在Mac lion和mysql x86_64上使用rails应用程序的问题。

我花了很多时间来解决这个问题,包括设置DVLD库path并将库复制到/ usr / lib中。

sudo cp /usr/local/mysql/lib/libmysqlclient.18.dylib / usr / lib

哎呀,什么让它工作。 最后我试着清除64位和32位的默认值,它工作!

默认删除com.apple.versioner.perl

不知道如果我的Perl是64位或32位,但我的数据库是64位,只是使用默认的默认似乎更好;-)