當前位置:首頁 » 編程軟體 » gnu鏈接器腳本翻譯

gnu鏈接器腳本翻譯

發布時間: 2023-03-07 16:54:14

『壹』 (ARM + Linux)GNU鏈接腳本中的".ARM.attributes"是什麼意思

所謂gnu鏈接腳本,其實一般都是lds腳本,或者說是elf格式的bin文件組成的腳本文件,主要是告訴你代碼是怎麼排列在elf文件終,至於為啥要燒到arm,其實一般都燒錄在flash中的,然後arm引導程序啟動就需要從flash獲取機器貓,也就是你說的那些段,常見的有data,bss,text,rely等

『貳』 關於編程的問題 高分

是這樣的,一個編譯好的可用的可執行程序,是分段的(.data段 .bss 段 .text段詳細點就網路下),而這個可執行程序在被生成之前需要先將源文件(.c 文件)編譯成 .o(二進制文件),而這個時候就開始了分段(上面所說的 .data段 .bss 段,.test 段),而你這種情況的出現可能是編譯時的編譯選項(例如著名的編譯工具 gcc, gcc -c 1.c -o 1.o ,這里的 -c 就是編譯選項)配置成了 -ffunction-sections -fdata-sections 造成的,這個會把每個文件的函數部分和非局部變數單獨放到一個段里,經過鏈接(這個過程可暫不用了解)最後相同的段組合起來就成了最後的可執行文件。你現在這種情況應該是這種情況造成的。這個可以通過修改編譯選項或鏈接腳本解決。

以上你的代碼並沒有明顯的問題,只是頭文件包含的這個文件我不太懂,可能是跑在特定平台上的,這不是重點,如果頭文件不正確會報出函數未聲明的警告,這不是導致這個情況發生的原因

解決辦法:

1、最粗暴方法:換個編譯器,windows 常用的編譯器有 cl(也就是vc 6.0 什麼的,大學時用的),Linux 操作系統(Ubuntu,Red hat,Centos ...)常用的 c 編譯器就是 gcc c++ 編譯器是 g++
2、修改鏈接腳本,因為看你的代碼應該是跑在某個平台上的,而一般這種情況下會有自己的鏈接腳本,你可以在 .data 段中添加這樣一句:*(.data*) 解決當前的 .data.align4 段無處可放的問題

再有問題再回復

『叄』 簡述一下編譯器和鏈接器的作用

1、編譯器:
編譯器對源文件進行編譯,就是把源文件中的文本形式存在的源代碼翻譯成機器語言形式的目標文件的過程,在這個過程中,編譯器會進行一系列的語法檢查。如果編譯通過,就會把對應的CPP轉換成OBJ文件。
2、鏈接器:
當鏈接器進行鏈接的時候,首先決定各個目標文件在最終可執行文件里的位置。然後訪問所有目標文件的地址重定義表,對其中記錄的地址進行重定向(加上一個偏移量,即該編譯單元在可執行文件上的起始地址)。
然後遍歷所有目標文件的未解決符號表,並且在所有的導出符號表裡查找匹配的符號,並在未解決符號表中所記錄的位置上填寫實現地址。最後把所有的目標文件的內容寫在各自的位置上,再作一些另的工作,就生成一個可執行文件。

『肆』 常見的c語言編譯器是什麼

目前最流行的C語言編譯器有以下幾種:

1、GNU Compiler Collection 或稱GCC

GCC(GNU Compiler Collection,GNU編譯器套件),是由 GNU 開發的編程語言編譯器。它是以GPL許可證所發行的自由軟體,也是 GNU計劃的關鍵部分。

GCC原本作為GNU操作系統的官方編譯器,現已被大多數類Unix操作系統(如Linux、BSD、Mac OS X等)採納為標準的編譯器,GCC同樣適用於微軟的Windows。GCC是自由軟體過程發展中的著名例子,由自由軟體基金會以GPL協議發布。

2、Microsoft C 或稱 MS C

Microsoft C 是c語言的一種IDE(集成開發環境),常見的還有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,High C,Turbo C等等......

3、Borland Turbo C 或稱 Turbo C

Turbo C是美國Borland公司的產品,Borland公司是一家專門從事軟體開發、研製的大公司。該公司相繼推出了一套 Turbo系列軟體, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 這些軟體很受用戶歡迎。

(4)gnu鏈接器腳本翻譯擴展閱讀:

C編譯的整個過程很復雜,大致可以分為以下四個階段:

1、預處理階段在該階段主要完成對源代碼的預處理工作,主要包括對宏定義指令,頭文件包含指令,預定義指令和特殊字元的處理,如對宏定義的替換以及文件頭中所包含的文件中預定義代碼的替換等,總之這步主要完成一些替換工作,輸出是同源文件含義相同但內容不同的文件。

2、編譯、優化階段編譯就是將第一階段處理得到的文件通過詞法語法分析等轉換為匯編語言。優化包括對中間代碼的優化,如刪除公共表達式,循環優化等;和對目標代碼的生成進行的優化,如如何充分利用機器的寄存器存放有關變數的值,以減少內存訪問次數。

3、匯編階段將匯編語言翻譯成機器指令。

4、鏈接階段鏈接階段的主要工作是將有關的目標文件連接起來,即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的目標文件成為一個能夠被操作系統裝入執行的統一整體。

『伍』 寫了一個程序可以編譯c語言,怎麼自動再鏈接然後執行生成的可執行文件

編譯的大致過程如下:

你完成的其實是前面一部分,的第一階段,生成了中間代碼。

目標代碼,即目標文件包含著機器代碼(可直接被計算機中央處理器執行)以及代碼在運行時使用的數據,如重定位信息,如用於鏈接或調試的程序符號(變數和函數的名字),此外還包括其他調試信息。

後面是由鏈接程序將編譯後形成的一組目標模塊以及它們所需要的庫函數鏈接在一起,形成一個完整的載入模塊。

目前的編譯工具通常編譯器和鏈接器都是分開,例如GNU的編譯器是gcc,鏈接器是ld

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:741
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1005
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:712
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:874
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:773
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1120
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:346
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:224
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:910
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:869