在macos上编译64位的erlang和nif

今天解决了以下几个问题:
  • macos下编译动态链接库的问题
  • macos下代码architecture导致NIF库不能载入的问题
  • 重新将macos下的erlang编译为64位版本


之前一直没有搞定在macos上编译nif的问题,弄得每次测试程序都很不方便。今天终于明白原因是将linux下编译动态库的参数和macos下还是不一样的。
在linux下编译的命令是:
gcc *.c -fPIC -shared -o hxnif.so

在macos下,-shared是没有用的,经过man ld命令察看参数后,得到下面的命令:
gcc *.c -fPIC -bundle -undefined dynamic_lookup -o hxnif.so 


提示:可以用otool命令替代liunx下的ldd命令,可以用file指令察看编译后的文件是32位的还是64位的,另外ld命令的manpages里很多内容的,可以手动制定是32位还是64位编译。


编译得到nif库文件后,迫不及待得开启erl进行测试,结果报错,说是architecture不匹配。原来我源码编译的时候默认安装成来32位的系统(用file命令验证的确如此),而我gcc编译库的时候默认是64位的(我的snow leopard 10.6.5是64位地)。因为nif用到的多个第三方库都已经是64位安装,我决定把erlang安装为64位的。

先./configure --help看到了64位选项参数是:--enable-darwin-64bit
于是运行下面几个命令:
./opt_build configure --enable-darwin-64bit 
./opt_build boot -a
./opt_build release -a


最后,大功告成,从此我再也不用远程到linux里调试erlang nif库了。。。

你可能感兴趣的:(C++,c,linux,erlang,gcc)