linux編譯debug
A. 在linux下編譯軟體和第三方庫時不分debug和release嗎
Linux系統編譯軟體是有debug版和release版本的區分。Linux下在開發軟體的過程中,會編譯成debug版的,用於程序調試。以gcc/g++編譯命令來說,在編譯產生.o文件時(必須是產生.o文件的那一步才能編譯成調試版),加入-g編譯選項,編譯出來的就是debug版,這個版本可以用gdb調試。
而如果軟體開發完成需要發布的時候,就需要在編譯時加上-O選項(不能加-g選項了),表示對代碼進行編譯優化,這時編譯出來的軟體就相當於是release版本了。
B. VLC源代碼包如何在linux下編譯+調試
你是為了裝軟體還是為了學習?如果只是裝個軟體,為什麼不裝二進製版的呢(.deb .rpm)。自己編譯挺麻煩的。
如果非想自己編譯,一般都是(我沒編譯過VLC,編譯過其他的,感覺像VLC這么大的軟體應該得較長時間!):先解壓下載的源碼包(tar.bz),然後從終端進入解壓後的源碼目錄,在終端輸入:一 ./configure ;二 make ;三 make install ;
一,好像是為了檢查當前系統參數,也可以在後面加環境變數參數(./configure [options])。如果沒問題便生成makefile
二,根據makefile編譯
三,編譯安裝。(二,可省略)
其實,不管是windows還是linux下載了軟體解壓後第一件事是讀readme!!!!!!!!!!!(其實你應該自己看readme和install,因為別人也不知道你下的軟體什麼情況,這兩個文件一般都會告訴你怎樣安裝以及軟體依賴什麼包!!)
再是讀install ,這是基本素質。要養成自覺性,這在linux下尤為重要!
至於調試,比較麻煩,不過如果只是裝軟體而不改代碼的情況下,不用專門調試(難道你還要用專門工具調試?) 既然說是菜鳥,又稿這么復雜的東西,並且搞這么復雜的東西又不在更專業的地方提問,網路知道一般是解決日常問題的地方!!!
不過一般情況下執行上述三步時會報錯,根據它報錯情況自己想辦法解決,一般來說是依賴不能滿足!
C. 在linux里,c程序的編輯、編譯、調試的詳細步驟是什麼
(1)用工具寫好C程序...比如vi
(2)打開終端,進入你存放C語言代碼的路徑 例如: cd /opt/
(3)gcc a.c -o abc 意思是:把你的a.c編譯成abc可執行文件
(4)在當前目錄終端下 運行生成的abc,例如: ./abc 前面的.不要掉了
後面可以用gdb進行調試,你可以自己去學習...這是最基本的!!
D. linux下gcc編譯的代碼.release和debug版 有什麼具體差距
利用gcc的-DDEBUG選項。
1.源文件DEBUG.c中有:
#include<stdio.h>
intmain(intargc,char*argv[])
{
#ifdefDEBUG
printf("DEBUGisdefinded ");
#else
printf("DEBUGisnotdefinded ");
#endif
}
2.Makefile文件為:
DEBUG=
CFLAG=-g
debug:DEBUG.c
gcc$(DEBUG)$(CFLAG)-o$@$^
3.輸入:gcc-g-odebugDEBUG.c
./debug
out:DEBUGisnotdefinded
4.輸入:gcc-DDEBUG-g-odebugDEBUG.c
./debug
out:DEBUGisdefinded
這樣DEBUG版本和release版本都有了.
E. 在linux中如何編譯C程序,使之成為可執行文件如何調試
Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。 -c,只編譯,不連接成為可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o為後綴的目標文件,通常用於編譯不包含主程序的子程序文件。 -o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。 -g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。 -O,對程序進行優化編譯、連接,採用這個選項,整個源代碼會在編譯、連接過程中進行優化處理,這樣產生的可執行文件的執行效率可以提高,但是,編譯、連接的速度就相應地要慢一些。 -O2,比-O更好的優化編譯、連接,當然整個編譯、連接過程會更慢.
例子:
gcc -o test test.c
結果生成可執行文件test
F. linux下一個版本,有Makefile,請問,如果分別編譯成debug和release版本,是輸入make -release么
一般,在開發測試階段用debug版本,而上線發布用release版本。
使用Makefile定製編譯不同版本,避免修改程序和Makefile文件,將會十分方便。
讀了一些資料,找到一個解決方法,Makefile預定義宏與條件判斷,結合make預定義變數,進行條件編譯。
比如,有一個test.cpp,包含這段代碼
#ifdef debug
//your code#endif
你希望在debug版本要執行它,在release版本不執行。
我們可以寫這樣的一個Makefile:
1 ver = debug
2
3 ifeq ($(ver), debug)
4 ALL: test_d
5 CXXFLAGS = -c -g -Ddebug
6 else 7 ALL: test_r
8 CXXFLAGS = -c -O3
9 endif
10
11 test_d: test.do12 g++ -o $@ $^
13
14 test_r: test.ro
15 g++ -o $@ $^
16
17 %.do: %.cpp
18 g++ $(CXXFLAGS) $< -o $@
19
20 %.ro: %.cpp
21 g++ $(CXXFLAGS) $< -o $@
簡單說一下,Makefile根據ver的不同定義了不同的編譯選項CXXFLAGS與輸出程序ALL,
debug版本輸出程序是test_d,release版本輸出程序是test_r
debug版本編譯選項是"-c -g -Ddebug",release版本編譯選項是"-c -O3"
debug版本object文件後綴是".do",release版本object文件後綴是".ro"
debug版本編譯選項使用"-D"定義宏debug,使得your code能夠執行。
不同版本的編譯選項、object文件、輸出程序均不同,所以可以同時編譯兩個版本的程序,互不影響。
Makefile執行時,首先判斷ver變數,如果ver的值是debug,編譯debug版,否則編譯release版。當然,默認情況下是編譯debug版的。
如果想編譯release版,要怎麼做?
只要在執行make時,對ver變數賦值,使得ver的值不為debug,比如# make ver=release
G. gnu arm程序在Linux上怎麼去編譯,怎麼debug呢
交叉編譯(不依賴第三方庫)類似於 gcc hello.c,如下:
akae@akae:~$ /opt/usr/local/arm/4.4.1/bin/arm-linux-gcc hello.c
前面是路徑+arm-linux-gcc.
H. FFmpeg之Linux下編譯與調試
下面的一切都是在 root 模式下進行的,可以不再 root 模式下進行
基礎環境就是編譯代碼的基礎庫,Ubuntu聯網安裝軟體很簡單,一個語句即可搞定,這里列出語句如下:
依賴庫分兩方面,參考以下網站列出的依賴庫信息,本文選擇的版本均參考於此網頁: FFmpeg依賴庫信息
首先創建 FFmpeg 代碼目錄,所有的源代碼放在這個目錄下
FFmpeg 編譯之後,即可使用。編譯生成的可執行程序在 ~/bin 目錄下
註:上面的 ./configure 配置編譯後並不能進行調試,需要如下配置.
剛才的工程可以運行,但不能debug。解決此問題,首先認定一點,生成的可執行程序中,ffmpeg 不包含調試信息,調試信息在 ffmpeg_g 中,debug 要選擇 ffmpeg_g。
另外,./config選項也是確定包含調試信息的核心,需要在config中添加:
採用以下命令重新config:
一些注意事項; 在使用 ffplay 播放生成 h264 格式的視頻時,播放速度會加快,解決方式:不要使用 FFmpeg 轉碼生成純 h264 格式的視頻,要使用一種容器包含 h264 視頻,即生成一種音視頻流格式,也就是不要生成純粹的 h264 碼流,而是生成諸如 mkv 等格式的文件。