arm64平臺gem install zookeeper報錯解決

在arm64平臺下,執行:

gem install zookeeper

報錯:

configure: error: cannot guess build type; you must specify one

說明,/var/lib/gems/2.3.0/gems/zookeeper-1.4.11/ext/zkc-3.4.5/c/config.sub文件已經過時,沒有包含當前arm64或aarch64的信息,需要更換成新版本,可以從其他的源碼包中獲取,比如Python2.7的源碼包

替換文件之後,手動執行:

./configure --prefix=/var/lib/gems/2.3.0/gems/zookeeper-1.4.11/ext --with-pic --without-cppunit --disable-dependency-tracking --build=aarch64
make

會報錯:

/tmp/ccHyPDT3.s:1648: Error: unknown mnemonic `lock' -- `lock xaddl x1,[x0]'

這是因爲在一段代碼中,直接嵌入了x86的彙編所以在arm平臺下會報錯,解決方法在https://issues.apache.org/jira/browse/ZOOKEEPER-2760

即找到./src/mt_adaptor.c

按照這裏的patch進行修改https://issues.apache.org/jira/secure/attachment/12863764/ZOOKEEPER-2760.patch

最後,修改extconf.rb文件,在找到make和make install,加入:

    Dir.chdir(BUNDLE_PATH) do
      configure = "./configure --prefix=#{HERE} --with-pic --without-cppunit --build=aarch64 --disable-dependency-tracking #{$EXTRA_CONF} 2>&1"
      configure = "env CFLAGS='#{DEBUG_CFLAGS}' #{configure}" if ZK_DEBUG
      
      safe_sh("cp /tmp/config.sub /var/lib/gems/2.3.0/gems/zookeeper-1.4.11/ext/zkc-3.4.5/c/")
      safe_sh(configure)
      safe_sh("rm -f /var/lib/gems/2.3.0/gems/zookeeper-1.4.11/ext/zkc-3.4.5/c/src/mt_adaptor.c")
      safe_sh("cp /tmp/mt_adaptor.c /var/lib/gems/2.3.0/gems/zookeeper-1.4.11/ext/zkc-3.4.5/c/src/")
      safe_sh("make  2>&1")
      safe_sh("make install 2>&1")
    end

修改完成後,執行

cd /var/lib/gems/2.3.0/gems/zookeeper-1.4.11/ext/
ruby  extconf.rb
make install

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章