簡體   English   中英

多個sysroot導致從makefile到錯誤的gcc調用假定Android NDK路徑。

[英]Multiple sysroot results in gcc calls from makefile to erroneous assume Android NDK path.

這是一個最棘手的問題。 當我運行我的makefile時,我在輸出中看到兩個sysroot:

    ubuntu@ubuntu:~/Desktop/LatestAndroidstuff/CmE_source_DAL_1.7_3564/CmCompact$ make
platform/wince/WibuCmHID/rules.mak:31: WibuCmHID only for Windows CE
/home/ubuntu/my-android-toolchain/bin//arm-linux-androideabi-gcc  -I./ -I./external/hidapi/include  -Os  -std=c99 -Wall -Wextra -fno-short-enums -fno-strict-aliasing --sysroot=/home/ubuntu/my-android-toolchain/sysroot --sysroot=/home/ubuntu/android-ndk-r13b/platforms/android-14/arch-arm  -o obj/release/android/armeabi-v7a/static/w_refcount.o -c   base/w_refcount.c 
In file included from base/w_refcount.c:29:0:
./base/w_define.h:31:19: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
                   ^
compilation terminated.
rules.mak:54: recipe for target 'obj/release/android/armeabi-v7a/static/w_refcount.o' failed
make: *** [obj/release/android/armeabi-v7a/static/w_refcount.o] Error 1

如果我編輯失敗的命令並刪除額外的sysroot(第二個),它的工作原理。

/home/ubuntu/my-android-toolchain/bin//arm-linux-androideabi-gcc  -I./ -I./external/hidapi/include  -Os  -std=c99 -Wall -Wextra -fno-short-enums -fno-strict-aliasing --sysroot=/home/ubuntu/my-android-toolchain/sysroot --sysroot=/home/ubuntu/android-ndk-r13b/platforms/android-14/arch-arm  -o obj/release/android/armeabi-v7a/static/w_refcount.o -c   base/w_refcount.c 

問題是,我已經查看了整個makefile。 makefile很簡單:

WBSMAK_ANDROID_NDK_HOME=/home/ubuntu/android-ndk-r13b
SYSROOT=/home/ubuntu/my-android-toolchain/sysroot
ANDROID_TOOLCHAIN_DIR=/home/ubuntu/my-android-toolchain/bin/
WBSMAK_ANDROID_CC=${ANDROID_TOOLCHAIN_DIR}/arm-linux-androideabi-gcc
WBSMAK_ANDROID_LD=${ANDROID_TOOLCHAIN_DIR}/arm-linux-androideabi-ld
WBSMAK_ANDROID_AR=${ANDROID_TOOLCHAIN_DIR}/arm-linux-androideabi-ar
WBSMAK_ANDROID_RANLIB=${ANDROID_TOOLCHAIN_DIR}/arm-linux-androideabi-ranlib

SHELL       := /bin/bash
AR          := WBSMAK_ANDROID_AR
CC          ?= WBSMAK_ANDROID_CC
LD          ?= WBSMAK_ANDROID_LD
RANLIB      := WBSMAK_ANDROID_RANLIB

為了使文件拿起sysroot:

CFLAGS_ARCH:= --sysroot = $ {SYSROOT}

但是在makefile中根本沒有提到關於那個其他第二個sysroot以及那個出現的路徑。 此外,我查看並確保它沒有獲取環境變量。

ubuntu@ubuntu:~/my-android-toolchain$ printenv | grep SYSROOT
ANDROID_SYSROOT=
LINARO_SYSROOT=/home/ubuntu/linaro-toolchain-4.6/arm-unknown-linux-gnueabi/sysroot
SYSROOT=/home/ubuntu/my-android-toolchain/

環境sysroot它指向我想要的地方。 如果我將Android NDK文件夾及其所有內容移出路徑,那在makefile中就沒有了,那么我就會收到錯誤。 如果我有額外sysroot所在的文件夾,那么庫編譯和鏈接,但它在Android設備上崩潰,這是Android 21,而不是14.我不知道為什么它總是Android 14.我可能會遺漏一些設置在某個地方? 也許當我使用make-standalone-toolchain.sh創建獨立工具時硬編碼進入了所以調用/ home / ubuntu / my-android-toolchain / bin / arm-linux-androideabi-gcc總是搜索android-14路徑?

很煩人的問題。 我一直在makefile上。 我不知道為什么gcc不斷拿起那個android 14 sysroot。 我可以只提供編譯,但鏈接是否提取默認的sysroot?

好吧,問題似乎是在子文件夾中一個仔細的邊線.mak文件,該子文件夾在現有字段的字符串中查找字符串並在查找時,在實際的gcc調用中使用ANDROID_ARCH作為--sysroot。 但是對於誰編寫它的功勞,它確實具有正確編譯和鏈接android原生模塊所需的其他-march設置。

故事的道德:總是瀏覽文件夾並瀏覽一切。

(當然我的應用程序仍然崩潰,但另一個問題是發現...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM