2014-06-19 50 views
1

我試圖建立在Windows靜態鏈接的android系統庫,我用下面的命令執行:如何通過Ndk-build靜態構建可執行文件?

%NDK_PATH%\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gcc.exe jni\main.c -o main --sysroot=%NDK_PATH%\platforms\android-9\arch-arm -static 

有時可能需要添加選項:

-static-libgcc -static-libstdc++ -std=gnu99 

輸出文件是建立後我想要什麼。
但是,如果我想生成可執行文件使用JNI \ Android.mkJNI \ Application.mk通過NDK-建立,該選項:

-static -static-libgcc -static-libstdc++ -std=gnu99 

我應該追加和。 mk文件我應該選擇嗎?
我嘗試添加:

LOCAL_CFLAGS := -static 

JNI \ Andorid.mk,但輸出不會改變。如何解決.mk問題?

+0

'-static-libstd ++'與C99無關,不是嗎? –

+0

實際上只需要**' - static'** – Hung

回答

4

您可以在Android.mk

LOCAL_LDFLAGS := -static 

結果使用不相同的簡單GCC一個內膽,但ARM-Linux的androideabi納米沒有報告動態符號對我來說。

+0

我試着將該選項添加到我的Android.mk中,它工作正常。但它會導致一些關於** ld **的鏈接器錯誤:它不能鏈接到某些函數,如:** dlopen **,** dlsym **。我無法從** ndk **找到libld.a,我應該通過** Android Bionic **創建一個libld.a嗎? – Hung

+0

不知道有關'libdl.a'。 'NDK的一部分libdl.so'有什麼問題? –

+0

** libdl.so **沒問題。但我只想使用**。a **。也許我應該找到一些方法來構建libdl.a或找到一些替代函數。 – Hung

相關問題