<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-348  評論-598  文章-0  trackbacks-0

    Linux x86 編譯 Android 遭遇 gnu/stubs-64.h

    這兩天心血來潮,執(zhí)行完 repo sync 后,順手來了一下 make,不料卻發(fā)現(xiàn)了以下的錯誤:

    host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.c
    In file included from /usr/include/features.h:378,
    from /usr/include/string.h:26,
    from external/clearsilver/java-jni/j_neo_util.c:1:
    /usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: No such file or directory
    make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libclearsilver-jni_intermediates/j_neo_util.o] Error 1

    兵來將擋,水來土掩,用關鍵字 android “error: gnu/stubs-64.h: no such file or directory” 來搜一下吧,發(fā)現(xiàn)搜索結果寥寥無幾,看樣子問題比較新,其中有一個 CSDN 的鏈接,就順手點了過去。帖子反映的問題和我一模一樣,不過它的分析給了我一些提醒。

    從錯誤信息入手,追蹤到/usr/include/gnu/stubs.h,看到如下代碼:

    #if __WORDSIZE == 32
    # include <gnu/stubs-32.h>
    #elif __WORDSIZE == 64
    # include <gnu/stubs-64.h>
    #else
    # error "unexpected value for __WORDSIZE macro"
    #endif

    順著 WORDSIZE,進入/usr/include/bits/wordsize,發(fā)現(xiàn):

    #if defined __x86_64__
    # define __WORDSIZE 64
    # define __WORDSIZE_COMPAT32 1
    #else
    # define __WORDSIZE 32
    #endif

    結合報錯的信息,可以知道這里一定是有定義__x86_64__,執(zhí)行一下 uname -a 可以確認 OS 明明是x86,為什么會__x86_64__呢?追根溯源, Android 源碼或許能露出蛛絲馬跡。

    果不其然,從 android.git.kernel.org 的 platform/external/clearsilver.git 上,看到5天前,有個 Ying Wang 的家伙提交一個修改:Fix 64-bit clearsilver shared library issue,參看這里,修改內容中 java-jni/Android.mk,和出現(xiàn)本次問題的路徑 java-jni/j_neo_util.c,同屬一個父目錄,看樣子有點關系,查看 Android.mk 的修改內容,發(fā)現(xiàn)做了如下修改:

    +# This forces a 64-bit build for Java6
    +ifneq ($(filter 1.6%,$(java_version)),)
    +    LOCAL_CFLAGS += -m64
    +    LOCAL_LDFLAGS += -m64
    +endif

    當發(fā)現(xiàn)你使用Java6時,它將強制使用64-bit,我想這就能解釋__x86_64__出現(xiàn)的原因。那么既然它要64-bit,我就滿足它。首先要解決 gnu/stubs-64.h: No such file or directory,解決這個問題需要執(zhí)行以下命令:

    [xuhj@eniac mydroid]$ apt-get install libc6-dev-amd64

    完成以后再執(zhí)行 make,發(fā)現(xiàn)有錯誤:

    /usr/bin/ld: cannot find -lstdc++

    那就繼續(xù)滿足它:

    [xuhj@eniac mydroid]$ apt-get install g++-multilib lib64stdc++6

    還是不行,又發(fā)生下面的錯誤:

    /usr/bin/ld: cannot find -lz

    再來執(zhí)行命令:

    [xuhj@eniac mydroid]$ apt-get install lib64z1-dev
    照此方法后出現(xiàn)
    Could not load ‘clearsilver-jni’
    不知是否因為“libclearsilver-jni.so”為64bit,在32bit系統(tǒng)無法加載?
    最后把java,javac默認改為1.5通過了編譯。
    如果還是有錯,需要執(zhí)行如下命令:
    make clean
    make update-api (經測試,這個可以不需要)
    make


    /usr/bin/ld: cannot find -lncurses
    這個問題是因為沒有安裝
    ncurses-devel包
    sudo apt-get install libncurses5-dev

    error: X11/Xlib.h No such file or directory
    you need to install the packages "libx11-dev" and "libglpk0-dev".

    修改Java當前版本的命令:
    sudo update-alternatives – –config java


    ---------------------------------------------------------
    專注移動開發(fā)

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2010-09-19 12:24 TiGERTiAN 閱讀(1803) 評論(0)  編輯  收藏 所屬分類: Android
    主站蜘蛛池模板: 国产乱弄免费视频| 亚洲偷自精品三十六区| 亚洲av日韩av不卡在线观看| 亚洲精品无码精品mV在线观看| 久久国产亚洲观看| 国产精品亚洲四区在线观看| 男人和女人高潮免费网站| 国偷自产一区二区免费视频| 在线观看H网址免费入口| 精品久久久久久久免费人妻| 亚洲区小说区图片区QVOD| 亚洲国产成人九九综合| 污网站免费在线观看| 777爽死你无码免费看一二区| 国产精品极品美女免费观看| 亚洲成AV人片在WWW色猫咪| 亚洲综合久久精品无码色欲| 日韩免费高清播放器| 在线免费观看污网站| 亚洲国产综合专区电影在线| 韩国亚洲伊人久久综合影院| 人妻无码一区二区三区免费| 免费v片视频在线观看视频| 亚洲精品不卡视频| 成人免费777777被爆出| 女性无套免费网站在线看| 久久久久久亚洲精品| 国产亚洲精彩视频| 无人在线观看免费高清视频 | 2019亚洲午夜无码天堂| a级毛片免费全部播放无码| 国产精品视频永久免费播放| 亚洲精品高清国产一线久久| 亚洲第一se情网站| 18禁超污无遮挡无码免费网站国产| 亚洲国产一成人久久精品| 国产精品亚洲综合一区在线观看 | 亚洲国产香蕉人人爽成AV片久久 | 国产成人A亚洲精V品无码| 亚洲精品无码日韩国产不卡av| 免费A级毛片无码A∨免费|