導航:首頁 > 源碼編譯 > 手動添加編譯參數

手動添加編譯參數

發布時間:2024-10-18 14:10:14

① dev c++怎麼加參數可以編譯c++11啊

工具->編譯選項

勾選編譯時加入如下命令

-std=c++11

② qtcreator璁劇疆澧為噺緙栬瘧

璇ユ搷浣滄ラゅ備笅錛
宸ュ叿錛歈t Creator銆佺數鑴戙
1銆佹墦寮Qt Creator錛屽苟鎵撳紑欏圭洰銆傚湪鑿滃崟鏍忎腑錛岄夋嫨鈥滃伐鍏封濓紙Tools錛夐夐」銆
2銆佸湪涓嬫媺鑿滃崟涓錛岄夋嫨鈥滈夐」鈥濓紙Options錛夈傚湪宸︿晶瀵艱埅鏍忎腑錛岄夋嫨鈥淜its鈥濄
3銆佸湪鍙充晶鐨勨淜its鈥濋夐」鍗′腑錛屽崟鍑燴滄坊鍔犫濇寜閽浠ユ坊鍔犳柊鐨凲t鐗堟湰銆
4銆佸湪寮瑰嚭鐨勫硅瘽妗嗕腑錛岄夋嫨瀹夎呯殑Qt鐗堟湰鐨勮礬寰勩傚湪鈥淏uild鈥濊劇疆閲岋紝涓婃柟緇勫悎妗嗛噷鍙浠ラ夋嫨鏋勫緩綾誨瀷錛圖ebug銆丷elease鎴栬匬rofile錛夛紝騫朵笖鍙浠ヨ嚜宸辨坊鍔犳柊鐨勬瀯寤虹被鍨嬶紙涓鑸娌″繀瑕侊級銆
5銆佸湪鏋勫緩閰嶇疆涓錛屽彲浠ヨ劇疆澧為噺緙栬瘧鐨勭浉鍏沖弬鏁般
6銆佺偣鍑燴滅『瀹氣濅互淇濆瓨Qt鐗堟湰閰嶇疆鍜屽為噺緙栬瘧璁劇疆銆

③ 如何使用自己的makefile編譯android ndk項目

android ndk提供了一套自己的makefile管理方式,要將源碼項目移植到android平台,需要按照android的makefile規則編寫makefile,還要按android的規則部署源碼目錄,對一個有自己的makefile管理方法的大型項目來說,只是做一下makefile遷移工作就是一件很麻煩的事。
其實android ndk上的編譯說到底也就是交叉編譯,只要配置好交叉編譯工具鏈,使用原有的makefile也是可以編譯出在android運行的c、c++程序的。
以android-ndk-r4-crystax的ndk版本為例:
編譯器路徑 android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin
名稱前綴 arm-eabi-
頭文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include
庫文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib
你可以試一下上面的配置,如果編譯鏈接都沒有問題,可以adb push到android設備上運行看看,什麼結果?
有點崩潰,根本運行不起來,你也許想試試看android自帶的ndk例子,確實是能夠運行的,問題在哪兒呢?
只是正確配置了編譯器、頭文件、庫文件還不夠,還需要配置編譯、鏈接的參數,android例子中編譯鏈接的參數是什麼呢?你也許想深究一下android的makefile,可是不久你會發現那是更崩潰的事情,裡面用了很多的make腳本函數。其實android的makefile是可以把執行的詳細命令輸出來的,只要make的時候加上V=1即可。可以看到確實帶了很多參數
編譯參數:
-fpic
-mthumb-interwork
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-Wno-psabi
-march=armv5te
-mtune=xscale
-msoft-float
-mthumb
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-Wa,--noexecstack
-D__ARM_ARCH_5__
-D__ARM_ARCH_5T__
-D__ARM_ARCH_5E__
-D__ARM_ARCH_5TE__
-DANDROID
鏈接參數:

-nostdlib
-Bdynamic
-Wl,-dynamic-linker,/system/bin/linker
-Wl,--gc-sections
-Wl,-z,noreloc
-Wl,--no-undefined
-Wl,-z,noexecstack
-L$(PLATFORM_LIBRARY_DIRECTORYS)
crtbegin_static.o
crtend_android.o
這其中鏈接參數中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最關鍵的,android使用了自己的進程載入器,並且自定義了c運行時的啟動結束。難怪先前編譯的進程啟動不了。

④ Android反編譯(三)— 手動編譯

PS: 最近沒工作,沒工作就沒需求,沒需求就沒什麼技術總結的靈感,那就沒更新什麼。但是兩個月不更新了,要是三個月不更新就會出大事,所以這次打算做一件有意思又不難的事。
之前有發文章寫過反編譯,今天就來試試反編譯之正編譯,開玩笑的,就是試試手動編譯的過程, 平時我們在項目中編譯出包都是使用Gradle直接執行assemble任務就能解決,我打算試試手動模擬整個過程。當然我也是第一次這樣搞,所以如果有寫得不對的地方,還望指出。

眾所周知,apk實質上就是一個壓縮包。復習一下,我們寫個最簡單的Demo,然後打包,然解壓,注意是解壓,不是反編譯,意義是不同的。

注意我這個Demo很簡單,什麼都不引入

然後我們看看整個出包的過程,隨便從網上拿張圖

然後這里我們用Android SDK給我們提供的工具來完成整個流程,工具在sdk文件夾下的build-tools文件夾下,有什麼aapt.exe、dx.bat,用的就是這些

這步應該是整個流程最簡單的吧,我感覺,所以從最簡單的開始。
我們先看看生成的dex有什麼

對比項目,我是一開始最基本的項目,什麼都沒動,所以只有一個MainActivity.clas,所以這里肯定是要先想辦法得到BuildConfig.class和R.class。

輸入命令:
aapt p -f -m -J <輸出路徑> -S <res路徑> -I <android.jar路徑> -M <Manifest路徑>

下一步,我們需要BuildConfig.class
這個BuildConfig.java是由gradle在我們配置好gradle之後自己幫我們生成的,所以我們直接拿來用,然後再javac就得到class文件了

然後我們再編譯我們的MainActivity.java並將它們放到同一個文件夾下, MainActivity因為引用了Android.jar和R文件,所以編譯時注意點,我為此被動好好的復習了一遍javac,都是淚

最後一步,我們用dx工具就能打出dex文件了

然後執行命令就得到一個Dex文件,看看這個文件裡面和上面直接打出的apk中的Dex文件有什麼不同:

看圖,我們上一步已經生成.dex了,那麼我們需要和compiled Resource 還有 Other Resource 一起生成APK。

我們先來生成compiled Resource,也就是resources.arsc
發現之前使用aapt生成R文件的時候沒寫完整,當時可以加一個-F參數直接生成arsc和Manifest

導出的abc.zip裡面就有resources.arsc和AndroidManifest.xml。
因為之前寫漏了,所以肯定要重新編一次MainActivity.java和Dex

我們把剛才的dex文件和aapt生成的resources.arsc、AndroidManifest.xml和res放到一個文件夾裡面。
PS:res文件夾也是上面aapt的命令生成的
然後我們對比這個文件夾和之前apk解壓的文件夾

最後運行

看來是成功了。

再說說遇到的還有兩個問題,並說下我解決問題的思路
(1)我把它們都放到一個文件夾之後,我壓縮成壓縮包,然後改後綴成.apk,然後發現安裝不了,我就直接反編譯,發現發編譯失敗,提示包有問題,以我多點玩包的經驗,我感覺就是壓縮工具出了問題,然後我去下個「好壓」(這不是廣告啊),然後就能正常反編譯了。
(2)但是還是安裝不了,再根據我多年的玩包經驗,我感覺是簽名問題,然後我隨便給這個包上一個簽名,就能正常安裝得到上圖的結果了。

總體來說,還真挺好玩的,這整個過程,就是翻車了幾次。做完之後感覺非常牛逼,為什麼這樣說,因為我知道這整個過程,我就可以做到,我不經過gradle來打包,我自己寫個python腳本來調用aapt和dx來打包也是能做到的。
當然上面純屬異想天開,因為這是個什麼都沒有的Demo所以覺得簡單,要是一個真實的項目,我感覺肯定要有很多坑,別的先不說,一個項目那麼多依賴關系,我這javac要搞死人。
最後如果有不對的地方,希望有大佬能夠指出,畢竟能運行也不能證明完全沒問題。然後我使用的build-tools是28的,不敢保證其它版本包括以後版本的玩法都一樣。

⑤ 系統編譯:如何給Make命令來傳遞參數

但有時候我們還是需要讓make命令帶入些參數給makefile腳本 比如你在代碼裡面需要定義個宏DEBUG來打開調試開關代碼如下:{i=9;#def DEBUGi=1;#i=0;#endprf("i=%d\n", i);0;} 般來說這個宏定義可以通過直接修改源代碼進行但這樣顯然不是很好辦法 另外個辦法是通過makefile修改比如: CFLAGS=-g -Wall -DDEBUG object=myprog all:$objectmyprog:a.c gcc ${CFLAGS} a.c -o ${object} 如果更進步連makefile都不想修改我們可以通過向make命令傳遞參數來進行為此我們需要適當修改makefile如下: CFLAGS=CFLAG CFLAGS-g -Wall -DDEBUG object=myprog all:$objectmyprog:a.c gcc ${CFLAGS} a.c -o ${object} 此時如果想打開DEBUG宏我們可以這樣輸入make命令: [ychq@ICM3-2 net]$ make CFLAG=-DDEBUG gcc -g -Wall -DDEBUG a.c a.c: In function `': a.c:9: warning: implicit declaration of function `prf' [ychq@ICM3-2 net]$ 我們可以發現DEBUG宏已經被正確傳入 更進步我們可以通過傳遞區別參數給make讓make編譯區別模塊

⑥ QtCreator怎麼添加編譯參數

QtCreator添加編譯參數方法:
在pro文件里添加:QMAKE_CXXFLAGS += -m128bit-long-double如果是C工程或者有C文件也用那就也加上:QMAKE_CFLAGS += -m128bit-long-doublepro文件很靈活

閱讀全文

與手動添加編譯參數相關的資料

熱點內容
pdf膜官網 瀏覽:598
游戲資源文件存在哪個文件夾 瀏覽:6
mc怎麼用命令方塊無限生成僵屍 瀏覽:793
英文蝦皮app怎麼登錄 瀏覽:432
同花順app怎麼確定盤中個股買入點 瀏覽:867
程序員摸底考試考什麼 瀏覽:525
如果編譯器是中文 瀏覽:515
程序員升職怎麼談 瀏覽:109
android機頂盒ui 瀏覽:359
tb編譯器 瀏覽:728
怎麼壓縮圖片和視頻在一起 瀏覽:563
gcc編譯win 瀏覽:229
單片機定時器t1初值怎麼算 瀏覽:642
android保存聯系人 瀏覽:196
菜雞app里的聯機游戲怎麼聯機 瀏覽:265
文件伺服器怎麼做許可權控制 瀏覽:954
壓縮機電機軸承 瀏覽:975
lol台服對戰伺服器延遲高怎麼辦 瀏覽:303
java路徑斜杠 瀏覽:383
java問號泛型 瀏覽:152