解決jni專案編譯生成so時報錯"argument list too long"
最近接手的一個jni專案是一個原先在iOS平臺上的專案,在mac機器上用eclipse時生成apk非常的順利,到了windows下編譯時卻總是在生成so時出現"argument list too long"的報錯,網上尋求若干資料後終於解決了這個問題,方法很簡單:
在jni的android.mk檔案裡 前面加上一句"LOCAL_SHORT_COMMANDS := true"即可。
關於LOCAL_SHORT_COMMANDS 引數的解釋:
設定這個變數為‘true’,當你的module有很多的原始檔,或者依賴很多的靜態或動態庫。這會強制編譯系統使用一箇中間的列表檔案,並通過@$(listfile)語法和library archiver 或者 static linker一起使用。
這在Windows上是非常有用的,因為它的命令列只接收最大8191個字元,這對於複雜的工程來說太小了。
注意如果設定了‘true’以外的值,都會恢復成預設行為。你也可以在Android.mk檔案中定義APP_SHORT_COMMANDS來強制使你的工程中的所有modules使用這項功能。
注意:預設我們不推薦啟用這個功能,因為它會使得編譯變慢。
參考文章:NDK官方開發指南翻譯之 Android.mk