導航:首頁 > 源碼編譯 > 連接器編譯器困難

連接器編譯器困難

發布時間:2022-10-03 01:40:22

A. 編寫一個 .c 文件 在 dos窗口下 調用vc6.0 的編譯器和連接器 ,完成小程序,應該具體怎麼做

messagebox()可能需要C++
寫一個 ice.cpp 內容如下

#include <windows.h>#include <Winuser.h>
#pragma comment (lib, "User32.lib")main(){MessageBox(NULL,"Hello World",NULL,NULL);return 0; }

在DOS環境下編譯鏈接命令
CL ice.cpp
就會得到 ice.exe
然後 打
ice.exe
就可運行。

詳細的CL 用法,在DOS窗 打
CL /?
就有幫助文件出現。

B. Visual Unit 設定編譯器和連接器

預先安裝好VC,比如我安裝的是Microsoft visual studio 2005.

再來,Visual Unit 4.0 安裝,完成後,重新打開進入演示版。
在窗口的主界面,點擊菜單欄「工程」-》「打開示例工程」,選擇一個自己想打開的項目。
點擊菜單欄「工具」-》「設定」。裡面便有「編譯器」和「編輯器」。

點擊「編譯器」,「名稱」項,選擇你安裝VC對應的Visual C++ 版本,比如"Visual C++ 2005". 編譯器和鏈接器,同樣道理,選擇之前你安裝VC的根目錄下,對應的編譯器和鏈接器。比如:
「D:\Program files\Microsoft Visual Studio 2005\VC\bin\cl.exe」
「D:\Program files\Microsoft Visual Studio 2005\VC\bin\link.exe」。
這樣便可以了。

如果項目執行測試,還是有類似編譯器或者鏈接器的問題,請繼續看以下注意事項,檢查下工程屬性是否一致:

待工程打開載入後,再次點擊菜單欄「工程」-》「工程屬性」,
在「常規」界面,選擇你需要的測試代碼編譯器,比如我裝的VC2005,那麼我就選擇Visual C++ 2005.

點擊第五個tab "鏈接"。點擊「環境變數」。在變數名下拉列表中,點擊您安裝VC的版本對應的dir,比如「vc2005_dir」. 在下面的「值」一欄,點擊「瀏覽」找到VC對應的根目錄。比如「D:/Program files/Microsoft Visual Studio 2005」。「OK」確認。再點擊當前小窗口的「保存」。關閉小窗口。
退回到「工程屬性」窗口,檢查「庫文件搜索目錄」,是否是自己設定的vc2005_dir為頭的目錄,比如:「$(vc2005_dir)/vc/lib」.

其它地方比如「頭文件」里的目錄設置,亦是如此。不過只要你設置了一處的環境變數,其它地方也就會自動調用你設置的路徑下的編譯器了。

希望對你有幫助。:)

C. 每個編譯器都不一樣么 c語言一般用什麼編譯器 每次一種編譯器不能編譯 另一種卻能編譯出

編譯器就是c語言編譯成二進制的東西,
不同的編譯器是不同的,
比如16位系統和32位系統的編譯器就不同,因為16位的認為int是2位元組,32位的則認為是4個位元組。
另外
linux上的編譯器跟windows下的編譯器也不同,linux上的認為內核空間佔1G,而windows下則認為佔2G,
此外兩個系統對環境變數以及其他的設置也不同所以編譯器更不能用。
而且不同的CPU的指令集時不同的,所以同樣int
a
=1
最後被編譯成的二進制代碼也是不同的。
C語言的編譯器有很多,windows下的編譯器也有很多,不同的編譯器可能會做一些不同的優化,linux下的gcc也可以添加選項讓他編譯windows下運行的程序。
main(int
argc,char*argv[


argc
是你的參數個數
argv是你的參數。
比如你最終程序叫
add
那麼
你在命令行執行add
1
2
那麼argc
=3
第一個參數使你的add,
第二個第三個就是
1
2,
在函數內部你就可以獲取這倆參數進行相加然後列印
visual
是個IDE,集成開發環境,已經集成好了windows下使用的編譯器連接器
等,
編寫代碼完成後直接點擊編譯就行了。
IDE的默認編譯器是可以更改的,不同的IDE設置不同。

D. 有關單片機編譯器的問題

編譯器,是將便於人編寫,閱讀,維護的高級計算機語言翻譯為計算機能識別,運行的低級機器語言的程序。編譯器將源程序(Source program)作為輸入,翻譯產生使用目標語言(Target language)的等價程序。源程序一般為高級語言(High-level language),如Pascal,C++等,而目標語言則是匯編語言或目標機器的目標代碼(Object code),有時也稱作機器代碼(Machine code)。

一個現代編譯器的主要工作流程如下:
源程序(source code)→預處理器(preprocessor)→編譯器(compiler)→匯編程序(assembler)→目標程序(object code)→連接器(鏈接器,Linker)→可執行程序(executables])

可見,雖然高級語言都是c,但目標代碼是基於機器平台的-c51,atmel,arm,motorola/freescale......同一個編譯器也有針對不同平台的版本,如keil有arm的版本,icc也支持freescale.

E. codeblocks在運行時已經沒有編譯錯誤,但是運行不起來,老是停止工作,編譯器顯示如下

源文件.c-->通過編譯器生成.o(目標文件)-->+通過連接器,調用庫函數代碼+刪注釋+外部函數價碼--->生成可執行文件.exe;

從這個過程來講,compiler編譯器不知道,即缺失;手動添加就可以了。

如果編譯沒問題但是一運行就會自動彈出.exe已經停止工作也沒顯示代碼有錯誤之類我是用CodeBlocks運行的運行結果如下:
Compiling:F:C++11.cpp
Linkingconsoleexecutable:F:C++11.exe
Processterminatedwithstatus0(0minutes,0seconds)
0errors,0warnings

Checkingforexistence:F:C++11.exe
Executing:D:ProgramFilesCodeBlocks/cb_console_runner.exe"F:C++11.exe"(inF:C++1)
Processterminatedwithstatus-1073741819(0minutes,4seconds)

F. vc6.0 編譯器在編譯文件的時候老卡住

呵呵,你的操作系統肯定不是正版,如果是正版就肯定不會有這樣的問題的。我也是一樣,只能用任務管理器強制關掉了。

G. Linux嵌入式交叉編譯工具鏈問題 淺談

簡介

交叉編譯工具鏈是一個由編譯器、連接器和解釋器組成的綜合開發環境,交叉編譯工具鏈主要由binutils、gcc和glibc 3個部分組成。有時出於減小libc庫大小的考慮,也可以用別的c庫來代替glibc,例如uClibc、dietlibc和newlib。交叉編譯工具鏈主要包括針對目標系統的編譯器gcc、目標系統的二進制工具binutils、目標系統的標准c庫glibc和目標系統的Linux內核頭文件。第一個步驟就是確定目標平台。每個目標平台都有一個明確的格式,這些信息用於在構建過程中識別要使用的不同工具的正確版本。因此,當在一個特定目標機下運行GCC時,GCC便在目錄路徑中查找包含該目標規范的應用程序路徑。GNU的目標規范格式為CPU-PLATFORM-OS。例如,建立基於ARM平台的交叉工具鏈,目標平台名為arm-linux-gnu。

交叉編譯工具鏈的製作方法

  1. 分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。

  2. 通過Crosstool腳本工具來實現一次編譯生成交叉編譯工具鏈。

  3. 直接通過網上(ftp.arm.kernel.org.uk)下載已經製作好的交叉編譯工具鏈。

方法1相對比較困難,適合想深入學習構建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用方法2或方法3構建交叉工具鏈。方法3的優點不用多說,當然是簡單省事,但與此同時該方法有一定的弊端就是局限性太大,因為畢竟是別人構建好的,也就是固定的沒有靈活性,所以構建所用的庫以及編譯器的版本也許並不適合你要編譯的程序,同時也許會在使用時出現許多莫名的錯誤,建議你慎用此方法。


方法1:分步構建交叉編譯工具鏈


  1. 下載所需的源代碼包

  2. 建立工作目錄

  3. 建立環境變數

  4. 編譯、安裝Binutils

  5. 獲取內核頭文件

  6. 編譯gcc的輔助編譯器

  7. 編譯生成glibc庫

  8. 編譯生成完整的gcc

由於在問答中的篇幅,我不能細述具體的步驟,興趣的同學請自行閱讀開源共創協議的《Linux from scratch》,網址是:linuxfromscratch dot org


方法2:用Crosstool工具構建交叉工具鏈(推薦)

Crosstool是一組腳本工具集,可構建和測試不同版本的gcc和glibc,用於那些支持glibc的體系結構。它也是一個開源項目,下載地址是kegel dot com/crosstool。用Crosstool構建交叉工具鏈要比上述的分步編譯容易得多,並且也方便許多,對於僅僅為了工作需要構建交叉編譯工具鏈的你,建議使用此方法。

運行which makeinfo,如果不能找見該命令,在解壓texinfo-4.11.tar.bz2,進入texinfo-4.11目錄,執行./configure&&make&&make install完成makeinfo工具的安裝

下載所需資源文件linux-2.4.20.tar.gz、binutils-2.19.tar.bz2、gcc-3.3.6.tar.gz、glibc- 2.3.2.tar.gz、glibc-linuxthreads-2.3.2.tar.gz和gdb-6.5.tar.bz2。然後將這些工具包文件放在新建的$HOME/downloads目錄下,最後在$HOME/目錄下解壓crosstool-0.43.tar.gz,命

令如下:
#cd$HOME/
#tar–xvzfcrosstool-0.43.tar.gz

接著需要建立自己的編譯腳本,起名為arm.sh,為了簡化編寫arm.sh,尋找一個最接近的腳本文件demo-arm.sh作為模板,然後將該腳本的內容復制到arm.sh,修改arm.sh腳本,具體操作如下:

# cd crosstool-0.43

# cp demo-arm.sh arm.sh

# vi arm.sh

修改後的arm.sh腳本內容如下:

#!/bin/sh
set-ex
TARBALLS_DIR=$HOME/downloads#定義工具鏈源碼所存放位置。
RESULT_TOP=$HOME/arm-bin#定義工具鏈的安裝目錄
exportTARBALLS_DIRRESULT_TOP
GCC_LANGUAGES="c,c++"#定義支持C,C++語言
exportGCC_LANGUAGES
#創建/opt/crosstool目錄
mkdir-p$RESULT_TOP
#編譯工具鏈,該過程需要數小時完成。
eval'catarm.datgcc-3.3.6-glibc-2.3.2.dat'shall.sh--notest
echoDone.

在arm.sh腳本文件中需要注意arm-xscale.dat和gcc-3.3.6-glibc-2.3.2.dat兩個文件,這兩個文件是作為Crosstool的編譯的配置文件。其中arm.dat文件內容如下,主要用於定義配置文件、定義生成編譯工具鏈的名稱以及定義編譯選項等。

KERNELCONFIG='pwd'/arm.config#內核的配置
TARGET=arm-linux#編譯生成的工具鏈名稱
TARGET_CFLAGS="-O"#編譯選項


gcc-3.3.6-glibc-2.3.2.dat文件內容如下,該文件主要定義編譯過程中所需要的庫以及它定義的版本,如果在編譯過程中發現有些庫不存在時,Crosstool會自動在相關網站上下載,該工具在這點上相對比較智能,也非常有用。

BINUTILS_DIR=binutils-2.19
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.10-8(根據實際情況填寫)
GDB_DIR=gdb-6.5

將Crosstool的腳本文件和配置文件准備好之後,開始執行arm.sh腳本來編譯交叉編譯工具。具體執行命令如下:

#cdcrosstool-0.43
#./arm.sh

經過數小時的漫長編譯之後,會在/opt/crosstool目錄下生成新的交叉編譯工具,其中包括以下內容:

arm-linux-addr2linearm-linux-g++arm-linux-ldarm-linux-size
arm-linux-ararm-linux-gccarm-linux-nmarm-linux-strings
arm-linux-asarm-linux-gcc-3.3.6arm-linux-objarm-linux-strip
arm-linux-c++arm-linux-gccbugarm-linux-objmpfix-embedded-paths
arm-linux-c++filtarm-linux-gcovarm-linux-ranlib
arm-linux-cpparm-linux-gprofarm-linux-readelf

然後將生成的編譯工具鏈路徑添加到環境變數PATH上去,添加的方法是在系統/etc/ bashrc文件的最後添加下面一行,在bashrc文件中添加環境變數

export PATH=/home/jiabing/gcc-3.3.6-glibc-2.3.2/arm-linux-bin/bin:$PATH

至此,arm-linux下的交叉編譯工具鏈已經完成,現在就可以使用arm-linux-gcc來生成試驗箱上的程序了!












H. 編譯器可是沒有思路.或許是我連編譯器的本質還沒搞懂吧.分為七個部分,詞法分析,語法分析等..對嗎

一般都是把源碼轉為elf,a.out,coff,omf之類格式的文件.再用連接器(或者鏈接器,反正就是linker).連接成程序(就是exe或dll之類的).
也有些是生成匯編代碼,再調用匯編器匯編成elf,a.out,coff,omf之類.再連接.
也有些是直接生成exe,dll的.
vc也是先編譯成win32格式(也說是COFF格式)的,再連接成exe,dll.

如果你想做編譯器,可以去看<<編譯原理>>之類的書.
也可以去下載一些開源的編譯器代碼來學習.
我也一直在學習編譯器的.已經有段時間了.但是還是不太清楚.
編譯原理看了大半也暈乎乎的,不知道說什麼.

閱讀全文

與連接器編譯器困難相關的資料

熱點內容
小說下載書包網txt在線下載 瀏覽:968
肉很多很欲的高質量現言 瀏覽:428
電影愛情來得不準時塞爾維亞 瀏覽:748
有關監獄的恐怖片 瀏覽:242
穿越僵屍世界收女系統 瀏覽:899
java關鍵字保留字 瀏覽:244
linux系統運維下載 瀏覽:48
同程的簡便演算法 瀏覽:649
linux命令行管理主機 瀏覽:300
騰訊雲20元的伺服器 瀏覽:215
plsql編程入門 瀏覽:12
《fog》txt下載 瀏覽:494
怎樣用氣泡紙解壓 瀏覽:120
香港李時珍的經典電影 瀏覽:319
母親和房子電影 瀏覽:141
收盡天下女明星的超級主播 瀏覽:469
程序員的ios游戲 瀏覽:719
可以在線看 瀏覽:56
十三武士迅雷 瀏覽:809
網站好看,網站不用下載 瀏覽:153