當前位置:首頁 » 編程軟體 » linux編譯多個c文件

linux編譯多個c文件

發布時間: 2022-01-08 11:46:22

1. linux 下面怎麼用gdb調試多個.c文件

Linux 下調試匯編代碼既可以用 GDB、DDD 這類通用的調試器,也可以使用專門用來調試匯編代碼的 ALD(Assembly Language Debugger)。
從調試的角度來看,使用 GAS 的好處是可以在生成的目標代碼中包含符號表(symbol table),這樣就可以使用 GDB 和 DDD 來進行源碼級的調試了。要在生成的可執行程序中包含符號表,可以採用下面的方式進行編譯和鏈接:

[xiaowp@gary code]$ as --gstabs -o hello.o hello.s
[xiaowp@gary code]$ ld -o hello hello.o

執行 as 命令時帶上參數 --gstabs 可以告訴匯編器在生成的目標代碼中加上符號表,同時需要注意的是,在用 ld 命令進行鏈接時不要加上 -s 參數,否則目標代碼中的符號表在鏈接時將被刪去。
編程序員通常面對的都是一些比較苛刻的軟硬體環境,短小精悍的ALD可能更能符合實際的需要,因此下面主要介紹一下如何用ALD來調試匯編程序。首先在命令行方式下執行ald命令來啟動調試器,該命令的參數是將要被調試的可執行程序:

[xiaowp@gary doc]$ ald hello
Assembly Language Debugger 0.1.3Copyright (C) 2000-2002 Patrick Alken
hell ELF Intel 80386 (32 bit), LSB, Executable, Version 1 (current)
Loading debugging symbols...(15 symbols loaded)
ald>

當 ALD 的提示符出現之後,用 disassemble 命令對代碼段進行反匯編:

ald> disassemble -s .text
Disassembling section .text (0x08048074 - 0x08048096)
08048074 BA0F000000 mov edx, 0xf
08048079 B998900408 mov ecx, 0x8049098
0804807E BB01000000 mov ebx, 0x1
08048083 B804000000 mov eax, 0x4
08048088 CD80 int 0x80
0804808A BB00000000 mov ebx, 0x0
0804808F B801000000 mov eax, 0x1
08048094 CD80 int 0x80

上述輸出信息的第一列是指令對應的地址碼,利用它可以設置在程序執行時的斷點:

ald> break 0x08048088
Breakpoint 1 set for 0x08048088

斷點設置好後,使用 run 命令開始執行程序。ALD 在遇到斷點時將自動暫停程序的運行,同時會顯示所有寄存器的當前值:

ald> run
Starting program: hello
Breakpoint 1 encountered at 0x08048088
eax = 0x00000004 ebx = 0x00000001 ecx = 0x08049098 edx = 0x0000000Fesp = 0xBFFFF6C0 ebp = 0x00000000 esi = 0x00000000 edi = 0x00000000
ds = 0x0000002B es = 0x0000002B fs = 0x00000000 gs = 0x00000000
ss = 0x0000002B cs = 0x00000023 eip = 0x08048088 eflags = 0x00000246
Flags: PF ZF IF
08048088 CD80 int 0x80

如果需要對匯編代碼進行單步調試,可以使用 next 命令:

ald> next
Hello, world!
eax = 0x0000000F ebx = 0x00000000 ecx = 0x08049098 edx = 0x0000000Fesp = 0xBFFFF6C0 ebp = 0x00000000 esi = 0x00000000 edi = 0x00000000
ds = 0x0000002B es = 0x0000002B fs = 0x00000000 gs = 0x00000000
ss = 0x0000002B cs = 0x00000023 eip = 0x0804808F eflags = 0x00000346
Flags: PF ZF TF IF
0804808F B801000000 mov eax, 0x1

若想獲得 ALD 支持的所有調試命令的詳細列表,可以使用 help 命令:

ald> help
Commands may be abbreviated.
If a blank command is entered, the last command is repeated.
Type `help <command>'' for more specific information on <command>.
General commands
attach clear continue detach disassemble
enter examine file help load
next quit register run set
step unload window write
Breakpoint related commands
break delete disable enable ignore
lbreak tbreak

2. Linux下有很多的.h和.c的C文件,如何編譯運行它們

會寫makefile嗎?不會的話就gcc **.c -o ***.c。之後就是./***來運行,***是你自己任意取的。

3. 怎麼在red hat linux 下並行運行多個c程序

fork()函數,生成父子進程
或者在shell里調用./a &進入後台運行
如果有參數,在a程序里寫system("path/b");
就實現了對b程序的調用,path是b存放的路徑
如果程序相互關聯的,編譯的時候要生成.o然後把三個程序鏈接成一個程序
gcc -c -o a.o a.c
gcc -c -o b.o b.c
ld ab a.o b.o
如果是內核程序,還要根據依賴關系,分前後順序裝載。

4. linux環境下如何編譯包含多個源文件的c/c++程序

多個文件一起編譯
用法:#gcc testfun.c test.c -o test
作用:將testfun.c和test.c分別編譯後鏈接成test可執行文件。

5. Linux下如何將多個.c文件生成.so文件

頭文件只是在開發編譯的時候才會用到,生成動態庫的時候記得在gcc編譯的時加上-fPIC參數

6. 怎麼把Linux 多個C文件編譯成一個ko文件

從網上找一個編譯模塊的Makefile,放到你的模塊的文件夾裡面,然後修改裡面的路徑指定編譯的內核,以及目標名稱。make就可以了。

7. 在linux下編譯文件,比如a.c,編譯完成後會生成一個a.c~ ,為啥會產生a.c~這個文件,如何避免生成這個文件

這個只是編譯過程產生的一個臨時文件,一般不會影響到你的編譯過程,也不會影響到你的系統運行,正常情況下應該在編譯完成以後就會自己消失,或者你自己把它刪除掉也行,沒有任何影響的。

8. 嵌入式Linux的C語言應用開發如何讓多個源文件編譯成一個可執行文件

交易編譯就是將文件編譯成目標機可執行的文件。
比如說:你在PC機上寫一個helloword,怎麼讓它到開發板上運行,開發板上的指令跟PC機不到,就需要用到交叉編譯工具,編譯成開發板上能識別的指令。

9. linux怎麼本地編譯多文件cmake

不到這個文件 你確定去它指定的目錄找一下 如果真的是沒有的話從opencv的目錄中拷貝一個文件過來就可以了。

10. 求助:在linux下,我有兩個.C源文件,怎麼編譯到一起

編譯沒問題,但不能連接成一個程序,否則就會出現 main() 函數的重復定義錯誤

最簡單的辦法是,寫一個 shell 腳本 c,內容是:

./b
./a

chmod a+x c

熱點內容
什麼人用獨立伺服器 發布:2024-12-24 10:22:09 瀏覽:683
mysql存儲過程異常回滾 發布:2024-12-24 10:22:07 瀏覽:842
ftp下載亂碼 發布:2024-12-24 10:14:44 瀏覽:265
安卓手機桌面如何加dock欄 發布:2024-12-24 10:14:01 瀏覽:254
工控類編程 發布:2024-12-24 09:47:20 瀏覽:74
21款奕跑有哪些配置 發布:2024-12-24 09:47:19 瀏覽:783
教室系統管理員如何幫助更改密碼 發布:2024-12-24 09:44:19 瀏覽:597
ip廣播伺服器安裝 發布:2024-12-24 09:33:56 瀏覽:942
路由器如何配置ss 發布:2024-12-24 09:06:14 瀏覽:425
安卓lol怎麼登錄 發布:2024-12-24 08:54:11 瀏覽:701