1. 程式人生 > >解決jni專案編譯生成so時報錯"argument list too long"

解決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

相關推薦

解決jni專案編譯生成so時報"argument list too long"

最近接手的一個jni專案是一個原先在iOS平臺上的專案,在mac機器上用eclipse時生成apk非常的順利,到了windows下編譯時卻總是在生成so時出現"argument list too long"的報錯,網上尋求若干資料後終於解決了這個問題,方法很簡單: 在j

解決製作交叉編譯工具鏈時報“/libgcc.mvars: No such file or directory make”

當自己手動製作交叉編譯工具鏈時,需要編譯binutils,gcc等,其中編譯過程絕對是很糾結的,一次通過的可能性不大,本文只針對一種型別的錯誤進行說明。 錯誤示例如下: $ make test -f

四種解決Argument list too long的辦法[轉載]

轉載【四種解決”Argument list too long”引數列表過長的辦法】 [[email protected] foo]$ mv * ../foo2 bash: /bin/mv: Argument list too long “Argument list too long”引數列表過

Linux 下rm刪除命令提示 /bin/rm: argument list too long解決辦法

       假設我們要刪除資料夾test,test下有很多檔案,如果我們使用rm ./test/* 命令進行刪除,則會出現/bin/rm: argument list too long無法刪除的報錯提示。 報錯提示原因:資料夾下的檔案數目過多,命令列過

Linux 問題 001:Argument list too long解決方法

要刪除test資料夾下以jpg結尾的檔案。 find test/ -name "*.jpg" | xargs -i rm {} 要拷貝test資料夾下以jpg結尾的檔案到train目錄。 fin

在Linux執行命令報”Arg list too long”的原因分析

最近在SUSE LINUX作業系統中遇到個問題:在一個包含上萬個檔案的資料夾中執行rm *刪除所有檔案時報錯“Arg list too long”,最後導致刪除失敗。後來查了下資料,經過分析發現這裡有以下幾個技術點需要注意: 1. 在LINUX作業系統有限制單條命令列的長度是128KB,也就是131

資料夾超過1萬個壓縮檔案時,Argument list too long問題的解決

最開始的命令如下 ls *.tar.gz | xargs -n1 tar xzvf 系統報錯: Argument list too long 原因是ls* 不能list這麼多的檔案。 改為  find ./ -type f -name '*.tar.gz' -exec

Linux rm 很多檔案出現/bin/rm: Argument list too long解決方法

本人由於不慎使用定時任務產生了很多垃圾檔案,刪除時出現/bin/rm: Argument list too long 最終在stackoverflow找到解決方法 執行以下指令碼迴圈刪除 for f in presstest?name*; do rm "$f";done

Linux中“Argument list too long解決方法

當我想執行以下命令時,報錯:mv train2014/* coco_train2014/ -bash: /bin/mv: Argument list too long這是因為這些命令的引數太長,即檔案個數過多。其中 train2014 資料夾的內容全是 .jpg 格式的圖片檔

解決Xcode9 Swift4下Cocoapods編譯Swift第三方時報

隨著Xcode9 Swift4 的到來,一些小問題也接踵而至。許多優秀的Swift第三方框架還未來得及迎接Swift4的到來,它們還停留在swift3.x的狀態,這個時候新建一個專案,使用cocoapods寫上需要使用的第三方,一編譯就是滿屏紅,如下圖。

vue專案中stylus引入時報解決

我在引入時遇到下面的問題編譯報錯: This dependency was not found: * !!vue-style-loader!css-loader?{"minimize":false,"sourceMap":false}!../../node_modules

PowerDesigner在生成SQL時報Generation aborted due to errors detected during the verification of the mod

mage .com sql inf pos pow model mode class pdm 生成sql 時候 會彈 把 Check model 的勾 去掉 問題就解決了PowerDesigner在生成SQL時報錯Generation aborted du

sublime安裝less2css後 編譯成css時報找不到指定檔案

很多人使用sublime安裝less2css後以為成功了 直接使用時結果會報這麼一個錯誤 這個呢 翻了翻度娘結果發現是因為沒有安裝lessc 所以才會報錯 然後我找到了簡潔得辦法。 node+npm 全域性安裝 less 就可以輕鬆解決問題啦 1.首先win+r 執行視窗 2.

解決Eureka Server高可用搭建時報無法註冊問題

    本機測試搭建Eureka Server的高可用環境,啟動後報錯如下: com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: 拒絕連線 (Connection refused)

C#實戰023:解決新增xxx.dll的引用時報,請確保xxx是有效的程式集或者COM元件

     今天在引入第三方dll時彈出錯誤提示【未能新增對“xxx.dll”的引用。請確保此檔案可訪問並且是一個有效的程式集或者COM元件】,正常情況下在解決方案中新增引用:右鍵滑鼠–>新增引用–>瀏覽–>選擇xxx.dll檔案,點選“確定”,然後再在

解決 linux下編譯.sh檔案報 “[: XXXX: unexpected operator” 問題

原因:linux下能正常執行的指令碼,在ubuntu系統中都會編譯報錯,因為二者使用的直譯器不一同導致 Linux:.sh ubuntu:.dash 因為ubuntu預設的sh是連線到dash的,又因為dash跟bash的不相容所以出錯了.執行時可以把sh換成bash檔

解決 linux下編譯make檔案報“/bin/bash^M: 壞的直譯器:沒有那個檔案或目錄” 問題

        PS背景:我在公司做sdk 的pc端開發,所以經常會在win下編譯通過之後跑到linux下再執行一次已確保能支援多平臺。        今兒在win下跑完一程式,然後放到linux下跑的時候,我用指令:sudo ./build.sh但是卻沒有任何反應。於是我換

解決eclipse專案編譯不成功-迴圈依賴的問題

迴圈依賴,指的是多個專案之間相互引用,導致專案之間存在迴圈引用。Ecplise預設編譯器檢測到迴圈依賴的專案是不會被編譯的。所以一定要將迴圈依賴設定為警告,讓專案順利編譯通過。 如何發現編譯不通過? 通過兩個方面可以發現專案是否編譯通過:1、查詢project檢視中專案圖示,如果專案圖示上有紅色

clang命令編譯c++程序時報

watermark follow 無法 type nsh pro 編譯問題 text 分享 今天本意是想看看go生成文件與c++生成文件的大小問題,但是突然發現clang無法編譯問題。用g++編譯沒問題。但是用gcc編譯同樣的問題。後面想起來用clang++才行。cc也不行

IDEA解決Maven專案編譯後classes檔案中沒有.xml問題

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): Mapper介面中的某個方法這個原因是因為maven 編譯時並沒有把 .xml 檔案放到 target資料夾下的c