在macos上編譯64位的erlang和nif

2021-08-31 02:39:50 字數 916 閱讀 8000

今天解決了以下幾個問題:

[list]

[*]macos下編譯動態鏈結庫的問題

[*]macos下**architecture導致nif庫不能載入的問題

[*]重新將macos下的erlang編譯為64位版本

[/list]

之前一直沒有搞定在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

編譯得到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庫了。。。

64位Ubuntu上編譯32位程式

1.確認主機為64位架構的核心,應該輸出為adm64,執行 dpkg print architecture 2.確認開啟了多支架功能,應該輸出為i386,執行 dpkg print foreign architectures 如果沒有,則需要手動開啟,依次執行 sudo dpkg add archi...

在64位Linux上安裝Memcached

詳細步驟如下 wget 先安裝libevent tar zxvf libevent 1.4.8 stable.tar.gz cd libevent 1.4.8 stable configure prefix usr local libevent 1.4.8 stable make make inst...

在64位Redhat上安裝Centos的yum源

至於為什麼不用redhat自帶的,因為redhat的yum源是需要註冊才能用的,一般自帶的yum有各種各樣的問題,所以我們先把它卸了唄,裝個好用的。1 rpm aq grep yum xargs rpm e nodeps 先刪除掉原來的yum 2 rpm ivh yum metadata parse...