簡體   English   中英

如何在ndk-build中使用自定義工具鏈?

[英]How to use a custom toolchain with ndk-build?

我花了一天時間,似乎無法為支持標准C ++庫的NDK工具鏈配置我的開發環境。 故事是我試圖交叉編譯用於ARM(Android)的libnfnetlink和libnetfilter_queue。

首先,我使用以下內容:

  • 具有CyanogenMod 11的Nexus 5(我忘了,沒關系,我還沒在設備上)
  • Ubuntu 12.04 32位
  • Android SDK捆綁包:adt-bundle-linux-x86-20140702
  • Android NDK:android-ndk-r10c

有做這個偉大的博客在這里 ,但它不完全是Netfilter的使用STLC ++並有一個NDK無字安裝/設置,將與簡單地調用NDK建造工作。 僅將文件復制到/ jni並調用ndk-build不能單獨工作。

無論如何,我的特定問題是當我將Netfilter lib源結構直接復制到一個空的Project的/ jni目錄中時,我得到了:

user@ubuntu:~/Projects/NetfilterTest/NetfilterNativeTest/jni$ ndk-build
[armeabi] Compile thumb  : netfilter_queue <= libnetfilter_queue.c
In file included from /home/user/Projects/NetfilterTest/NetfilterNativeTest/jni/libnetfilter_queue/src/libnetfilter_queue.c:35:0:
/home/user/Projects/NetfilterTest/NetfilterNativeTest/jni/libnetfilter_queue/src/internal.h:4:20: fatal error: config.h: No such file or directory
compilation terminated.
make: *** [/home/user/Projects/NetfilterTest/NetfilterNativeTest/obj/local/armeabi/objs/netfilter_queue/libnetfilter_queue/src/libnetfilter_queue.o] Error 1

找不到config.h文件。 經過一番谷歌搜索后,我意識到了這一點,因為標准的C ++庫在預構建的工具鏈中不可用。

一切都指向我創建自己的工具鏈。 因此,我使用NDK包含的腳本構建自己的交叉編譯器。

cd /home/user/android-ndk-r10c/build/tools
./make-standalone-toolchain.sh --platform=android-19 --ndk-dir=/home/user/android-ndk-r10c/ --install-dir=/home/user/android-ndk-r10c/prebuilt/android-arm/android-19

為了確認config.h已包含在我的工具鏈中,我進行了搜索。 在那:

user@ubuntu:~/Projects/NetfilterTest/NetfilterNativeTest/jni$ find /home/user/android-ndk-r10c/prebuilt/android-arm/android-19/ -iname config.h
/home/user/android-ndk-r10c/prebuilt/android-arm/android-19/sysroot/usr/include/linux/config.h

自然,我需要設置我的環境和Android.mk

JAVA_HOME=/usr/local/java/jdk1.6.0_45
JRE_HOME=$JAVA_HOME/jre
ANDROID_SDK=/home/user/adt-bundle-linux-x86-20140702
ANDROID_NDK=/home/user/android-ndk-r10c
ANDROID_CHAIN=/home/user/android-ndk-r10c/prebuilt/android-arm/android-19

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ANDROID_SDK/sdk/platform-tools:$ANDROID_SDK/sdk/tools:$ANDROID_NDK:$ANDROID_CHAIN/bin

SYSROOT=$ANDROID_NDK/platforms/android-19/arch-arm

CC=arm-linux-androideabi-gcc

export CC
export ANDROID_SDK
export ANDROID_NDK
export SYSROOT
export JAVA_HOME
export JRE_HOME
export PATH

這是我的Android.mk(基於Roman10的博客:

LOCAL_PATH:=$(call my-dir)

#####################################################################
#                     build libnflink                               #
#####################################################################
include $(CLEAR_VARS)
LOCAL_MODULE:=nflink
LOCAL_C_INCLUDES:= $(LOCAL_PATH)/libnfnetlink/include
LOCAL_SRC_FILES:=\
    libnfnetlink/src/iftable.c \
    libnfnetlink/src/rtnl.c \
    libnfnetlink/src/libnfnetlink.c

include $(BUILD_STATIC_LIBRARY)

#####################################################################
#                   build libnetfilter_queue                        #
#####################################################################

include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/libnfnetlink/include \
    $(LOCAL_PATH)/libnetfilter_queue/include
LOCAL_MODULE:=netfilter_queue
LOCAL_SRC_FILES:=libnetfilter_queue/src/libnetfilter_queue.c
LOCAL_STATIC_LIBRARIES:=libnflink

include $(BUILD_STATIC_LIBRARY)

#####################################################################
#                     build our code                                #
#####################################################################

include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/libnfnetlink/include \
    $(LOCAL_PATH)/libnetfilter_queue/include
LOCAL_MODULE:=nfqnltest
#LOCAL_LDLIBS:=-lstdc++
LOCAL_SRC_FILES:=nfqnl_test.c
LOCAL_STATIC_LIBRARIES:=libnetfilter_queue
LOCAL_LDLIBS:=-llog -lm

include $(BUILD_EXECUTABLE)

我仍然使用ndk-build找不到config.h。

我已經讀到ndk-build命令利用了NDK中包含的config.mk/setup.mk,必須對其進行修改以指向替代工具鏈。

我完全相信Google自己的工具不能簡單地指向它們為您提供腳本的自定義工具鏈。 如果有人對我如何使用我的工具鏈來編譯Netfilter有任何建議,或者只是一般而言,那將是一個很大的幫助。

提前致謝!

當我在網絡上搜索libnetfilter_queue.c的版本時, libnetfilter_queue.cinternal.hconfig.h任何引用,因此我不確定您使用的文件是哪個版本-您可以指向你有哪一個?

另外,它所查找的config.h不是在工具鏈中找到的(應該包含在linux/config.h ),但是很可能是您希望通過運行configure腳本來生成的。 因此,除非您運行了configure腳本(或從其他位置獲取了預生成的config.h ),否則您將無法真正構建它。

最后,這與libstdc ++沒有任何關系,因為所有源文件似乎都是純C的,而不是C ++的。

暫無
暫無

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

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