導航:首頁 > 源碼編譯 > 編譯obj

編譯obj

發布時間:2022-02-17 08:06:14

❶ 為什麼我易語言編譯的軟體的後綴是obj

生成.obj沒有生成exe通常是編譯階段通過,在鏈接階段出現問題,通常是link.ini配置有誤。
如果你是新手,很新很新的那種,建議卸載現在的版本,去西西下載一個5.11破解版。

❷ c語言編譯生成的.obj文件解釋下

c語言編譯生成的.obj文件是一種文本文件,程序編譯時生成的中間代碼文件目標文件,一般是程序編譯後的二進制文件,再通過鏈接器和資源文件鏈接就成可執行文件了。OBJ只給出了程序的相對地址,而可執行文件是絕對地址。

obj文件基本結構:OBJ文件不需要任何種文件頭(File Header),盡管經常使用幾行文件信息的注釋作為文件的開頭。

OBJ文件由一行行文本組成,注釋行以符號「#」為開頭,空格和空行可以隨意加到文件中以增加文件的可讀性。有字的行都由一兩個標記字母也就是關鍵字(Keyword)開頭,關鍵字可以說明這一行是什麼樣的數據。

(2)編譯obj擴展閱讀:

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

1、預處理階段

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

2、編譯、優化階段

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

3、匯編階段

將匯編語言翻譯成機器指令。

❸ C語言編譯產生的.OBJ文件和匯編編譯產生的.OBJ文件,如何連接

一同學習。。。

Trubo C的命令行編譯連接
所謂命令行編譯,是指在dos下,調用Trubo C的tcc.exe程序.來完成對turbo C源程序的編譯連接工作.當選擇對後綴為*.asm的匯編程序文件編譯時,tcc還要調用TASM後才能對後綴為.asm的文件進行編譯,這種方式適合於c程序與匯編語言混合編程的編譯連接,當c程序嵌入匯編指令時,也必須用此方法編譯連接。
命令行編譯的格式為:
tcc [選項1 選項2 ...]文件名1 文件名2...其中選項是指對後面給出的文件進行連接時的選擇項,可選的常用選擇項如下所示:每個選項前都帶有"-"號,且大小寫是區分的。文件名是指源文件.c或目標文件.obj或庫文件.lib當不指定只編譯不連接時,tcc將完成編譯和連接兩個步驟,對.lib庫只進行形式上的連接,標准庫用戶不用進行連接。
例如:
tcc -ib:\include -lb:\lib -etest start.c body.obj myc當執行該命令時,表示將start.c源文件和body.obj目標文件及myc.c(命令行中該文件無後綴),分別進行編譯(對body.obj文件不再編譯),然後連接生成名為test的執行文件test.exe(由-test給出).
-ib:\include 表示包含文件的路徑是b:\include
-ib:\lib 表示庫文件的路徑是b:\lib
又例如:
tcc -ms -efile -lc:\tc\lib file1 file2.obj graphics.lib
其中-ms表示選擇小內存模式進行編譯,它也是turbo c的預設編譯模式,將file1進行編譯,然後和file2.obj 及graphics.lib進行連接.生成file.exe的可執行文件.其中graphcis.lib庫的路徑為c:\tc\lib,即意為在c:\tc\lib目錄下去尋找graphics.lib文件.當進行混合編程時,如果已有匯編程序s3.asm其命令行可寫為
tcc ic:\tc\include -lc:\tc\lib -mm s1 s2 s3.asm mylib.lib
表示用中模式(-mm)編譯源文件s1.c和s2.c,調用TASM對s3.asm進行編譯,然後連接生成可執行文件s1.exe,編譯時,到c:\tc\include目錄中去找包含文件,到
c:\tc\lib目錄中去找庫文件mylib.lib.
---------------------------------------
http://topic.csdn.net/t/20010308/22/81569.html
http://www.down22.org/plus/view.php?aid=15882

比VC難用。。。

❹ 易語言靜態編譯出.obj文件

靜態編譯失敗.靜態編譯完後.請查輸出文本。obj、res文件都是靜態編譯失敗後的文件。

建議不要用易語言,而要用Visual Basic編程語言來編譯。這樣編譯出來的格式就不是OBJ,而是一個正常的可執行文件EXE。

Visual Basic是一種由 Microsoft 公司開發的結構化的、模塊化的、面向對象的、包含協助開發環境的事件驅動為機制的可視化程序設計語言。從任何標准來說,VB都是世界上使用人數最多的語言——不管是盛贊VB的開發者還是抱怨VB的開發者的數量。它源自於BASIC編程語言。VB擁有圖形用戶界面(GUI)和快速應用程序開發(RAD)系統,可以輕易的使用DAO、RDO、ADO連接資料庫,或者輕松的創建ActiveX控制項。程序員可以輕松的使用VB提供的組件快速建立一個應用程序。

❺ 如何編譯預置obj 文件

1. 如何在preloader 中預置obj 文件?
Branch: GB, GB2, ICS, ICS2, JB, JB2
Step1. 首先獲取obj 文件,如果是preloader 已有的Source code 需要預置為obj 文
件,那麼可到如下路徑獲取obj 文件:mediatek/[source]/preloader/out
Step2. 在mediatek/[source]/preloader 目錄下創建文件夾:myobjs,將Step1 中獲取
的obj 文件放到該文件夾中
Step3. 修改mediatek/[source]/preloader/Makefile 文件,在該文件如下Code:
$(D_BIN)/$(PL_IMAGE_NAME).elf:
之前添加:
MYOBJS := $(D_ROOT)/myobj
Step4. 修改mediatek/[source]/preloader/Makefile 中$(D_BIN)/$(PL_IMAGE_NAME).elf
生成命令,將MYOBJS 加入:如下:
$(D_BIN)/$(PL_IMAGE_NAME).elf:
$(LD) --gc-sections -Bstatic -T$(MTK_PATH_PLATFORM)/link_descriptor.ld \
$(wildcard $(D_OBJ)/*) $(wildcard $(MYOBJS)/*) $(SECURITY_LIB) -Map
system.map -o $(D_BIN)/$(PL_IMAGE_NAME).elf
Step5. 如果添加的obj 文件在preloader 中有對應的Source code,還需要修改
Source code 對應的make File 文件,將該Source code 從make File 文件中刪除,以
bmt.c 為例,需要修改medaitek/platform/$platform/preloader/src/drivers/makefile,
將bmt.c 從該文件的MOD_SRC 中刪除
說明:preloader 的Source code 位於如下路徑:
– mediatek/platform/$platform/preloader/
– mediatek/custom/$platform/preloader/
– mediatek/custom/common/preloader/
– mediatek/custom/$porject/preloader/
2. 如何在uboot 中預置obj 文件?
Branch: GB, GB2, ICS, ICS2
Case1. 該obj 文件是從第三方處獲取,在codebase 原本不存在.c 文件,不需要編
譯進某個lib 文件
Step1. 首先獲取obj 文件
Step2. 在bootable/bootloader/uboot 目錄下添加myobjs 文件夾,將Step1 中獲取的
obj 文件放到該文件夾中
Step3. 修改bootable/bootloader/uboot/Makefile,在該文件如下Code:
GEN_UBOOT = \
之前添加:
MYCUSTOMOBJS := $(wildcard myobjs/*)
MEDIATEK CONFIDENTIAL
FOR zhanghui@ vanzotec.com USE ONLY
[email protected],time=2013-10-08 19:27:59,ip=180.166.121.198,doctitle=如何在preloader、uboot、lk、kernel中預置obj文件.docx,company=Vanzo_WCX
Step4. 修改bootable/bootloader/uboot/Makefile,將MYOBJSDIR 中的obj 文件添加
到u-boot 的生成命令中,如下:
GEN_UBOOT = \
UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
sed -n -e 's/.*$(SYM_PREFIX)__u_boot_cmd_.*/-u\1/p'|sort|uniq`;\
cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(MYCUSTOMOBJS)
$(__OBJS) \
Case2. 該obj 文件在Codebase 中存在對應的.c 文件,現在需要將.c 文件刪除,替
換為obj 文件
Step1. 編譯生成obj 文件,uboot 編譯生成的obj 文件與其.c 文件位於同級目錄下
Step2.在原先obj 文件目錄下創建一個文件夾prebuilt,並將obj 文件放入其中,同
時將.c 文件刪除
Step3. 修改包含該.c 文件的Makefile 文件(一般與.c 文件位於同級目錄下),將該obj
文件的名稱從OBJS 變數中刪除,同時在該Makefile 中添加一個變數,MYOBJS,將
該obj 文件添加到MYOBJS 中,以
bootable/bootloader/uboot/drivers/video/cfb_console.c 為例,修改該目錄下的
Makefile 文件,將cfb_console.o 從變數OBJS 中刪除,同時添加一行:
MYOBJS := cfb_console.o
Step4. 繼續修改Step3 中的Makefile,將MYOBJS 添加到生成LIB 的命令中,如下:
$(LIB): $(OBJS) $(SOBJS)
$(AR) $(ARFLAGS) $@ $(OBJS) $(MYOBJS) $(SOBJS)
Case3. 某些模塊,Uboot 和kernel 共用同一份Source code,比如LCM,這種情況
需要做特殊處理,以LCM 為例,如下:
Step1. 首先編譯出obj 文件,路徑位於:mediatek/custom/out/$project/uboot/lcm,
同時將要替換的Source code 刪除(mediate/custom/common/kernel/lcm)
Step2. 在mediatek/custom/$project/uboot 下面添加lcm 文件夾,同時將Step1 中獲
取到的obj 文件添加到該文件夾下,同時將原目錄下的obj 文件刪除(這里獲取的
obj 文件一定要是Uboot 目錄下的,不要到kernel 目錄下獲取這些obj 文件)
Step3. 修改mediatek/custom/common/uboot/Makefile 文件,將要替換的obj 文件
名稱從COBJS 刪除:COBJS += $(patsubst %.c, %.o, $(wildcard lcm/*.c))
Step4. 繼續修改Step3 中的Makefile,添加如下Code:MYOBJS := $(addprefix $(obj),
$(wildcard lcm/*.o)),同時將MYOBJS 添加到$(LIB)的編譯命令中,如下:
$(LIB): $(OBJS) $(SOBJS)
$(AR) $(ARFLAGS) $@ $(OBJS) $(MYOBJS) $(SOBJS)
說明:Uboot 的Source Code 主要位於如下路徑:
– bootable/bootloader/uboot/
– mediatek/platform/$platform/uboot/
MEDIATEK CONFIDENTIAL
FOR zhanghui@ vanzotec.com USE ONLY
[email protected],time=2013-10-08 19:27:59,ip=180.166.121.198,doctitle=如何在preloader、uboot、lk、kernel中預置obj文件.docx,company=Vanzo_WCX
– mediatek/custom/$platform/uboot/
– mediatek/custom/common/uboot/
– mediatek/custom/$porject/uboot/
3. 如何在kernel 中預置obj 文件?
Branch:GB, GB2, ICS
– 比如要將xxx.c 用xxx.o 替代編譯
– 先正常編譯出xxx.o
– 然後在xxx.c 所在目錄下創建prebuilt 目錄,將xxx.o 放入
• 注意prebuilt 目錄的目錄名不能修改,否則在clean 階段會被清除
– 修改xxx.c 所在目錄下的Makefile 文件,原本已經有obj-y := xxx.o,在其後
面添加xxx-y := prebuilt/xxx.o 即可
– mediatek/custom/[XXX]/kernel 目錄下對應的Source Code 沒有Makefile 文件,
自己在Source code 對應的同級目錄下添加一個Makefile 即可
Branch:ICS2, JB, JB2
– 比如要將debug.c 用debug.o 替代編譯
– 先正常編譯出debug.o (針對kernel 和lk, uboot 共用Source Code 的情況,
如LCM,這里獲取 到的obj 文件一定要是kernel/out 目錄下的)
– 然後將debug.o 復制到原先debug.c 所在目錄下,並重命名為
debug.o_shipped
– 原先debug.c 同級目錄下的Makefile 不變,依然保持為
obj-y:=debug.o;mediatek/custom/[XXX]/kernel 目錄下對應的Source Code 沒有
Makefile 文件,自己在Source code 對應的同級目錄下添加一個Makefile 即可
– 重新編譯kernel 即可
說明:kernel 的Source code 主要位於如下路徑:
– kernel/
– mediatek/platform/$platform/kernel/
– mediatek/[source]/kernel/
– mediatek/custom/$platform/kernel/
– mediatek/custom/common/kernel/
– mediatek/custom/$porject/kernel/
4. 如何在lk 中預置obj 文件
Branch:JB,JB2
Step1. 在bootable/bootloader/lk/makefile 中添加:MYOBJ :=
Step2. 獲取obj 文件,Codebase 編譯生成的obj 文件位於
bootable/bootloader/lk/build-$project/custom/$project/lk 目錄下
Step3. 將獲取的obj 文件放到與.c 文件相同目錄下;同時可將.c 文件刪除
MEDIATEK CONFIDENTIAL
FOR zhanghui@ vanzotec.com USE ONLY
[email protected],time=2013-10-08 19:27:59,ip=180.166.121.198,doctitle=如何在preloader、uboot、lk、kernel中預置obj文件.docx,company=Vanzo_WCX
Step4. 將相應的.c 文件從包含該.c 文件的rules.mk(一般與.c 文件位於同級目錄)中刪

Step5. 將Step3 中添加的.o 文件在rules.mk 中添加到MYOBJ,比如MYOBJ += test.o
Step6. 打開bootable/bootloader/lk/make/build.mk,將MYOBJ 添加到OUTELF 的生
成命令中,如下:
else
$(OUTELF): $(ALLOBJS) $(LINKER_SCRIPT)
@echo linking $@
$(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(ALLOBJS)
$(MYOBJ) $(LIBGCC) -o $@ endif
Step7. 如果要替換的.c 文件是lk 與kernel 共用的,比如lcm 模塊,那麼Step2 需要
做一下修改:將獲取的obj 文件放到mediatek/custom/$project/lk/lcm 中,同時要
確保這里獲取的obj 文件是bootable/bootloader/lk/build-
$project/custom/$project/lk 目錄下的,不要到kernel/out 目錄下獲取這些obj 文件
說明:lk 的Source Code 主要位於如下路徑:
– mediatek/platform/$platform/lk/
– mediatek/custom/$platform/lk/
– mediatek/custom/common/lk/
– mediatek/custom/$porject/lk/
– bootable/bootloader/lk/
MEDIATEK CONFIDENTIAL

❻ 如何打開C語言編譯出的OBJ格式文件

OBJ 文件是二進制的文件,代碼已經是機器碼了,可用反匯編程序打開試試,不過看到的是匯編語言的程序若你會用debug,可以用它來試試

❼ C++中如何將兩個已編譯的.obj文件連接

要完成鏈接,主函數里要有調用另一文件函數的聲明.
具體操作:
1.打開visual studio,新建項目/win32控制台應用程序/輸入項目名稱/在應用程序向導中點應用程序設置選空項目/完成
2.在解決方案資源管理器中右擊項目名稱/添加/現有項/然後下拉"文件類型"選擇所有文件(*.*)/把你的那些obj文件添加進來
3調試/啟動調試F5,OK
其實在IDE下步驟是比較麻煩,要是在命令行下,只要一兩條命令即可
cd /d obj文件所在目錄
link *.obj

❽ 編程編譯時生成的obj文件和exe文件本質上有什麼區別

本質上都是2進制代碼,
但是
obj
沒有經過鏈接的重定位,不是可執行的代碼。
而且一個obj對應一個cpp編譯單元,裡面的外部符號都沒解析出來。
比如a.cpp
通過b.h使用了一個
b.cpp里定義的函數
func();
那麼a.cpp生成的obj裡面只會有func()
這個函數名的調用而已,也就是一個(對a.obj來說的)外部符號。
只有經過鏈接成為了.exe,
相應於a.obj裡面的func()的調用才會更新成實際的b.obj裡面的func()的實際地址。
對全局變數也是同樣的道理。

❾ 如何在kernel模塊中使用已經編譯好的obj文件

1。 創建自己的obj文件
我最開始使用 gcc -c ex_obj.c -o ex_obj.o_shipped 來做的,結果鏈接後不能正常工作。

原來是一定要放在編譯kernel的環境中編譯這個obj。
ifneq ($(KERNELRELEASE),)
obj-y := xxxx.o #your obj files goes here. 關鍵在這里,用obj-y 來指定要編譯的,然後這個過程就在編譯的時候停了,不會繼續鏈接。
else
KERNELDIR ?= /lib/moles/$(shell uname -r)/build
PWD := $(shell pwd)

default:
$(MAKE) -C $(KERNELDIR) M=$(PWD)

endif

clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

depend .depend dep:
$(CC) $(CFLAGS) -M *.c > .depend

ifeq (.depend,$(wildcard .depend))
include .depend
endif
編譯成功後,將這個拷貝到需要鏈接的模塊目錄。
記住要添加_shipped後綴

2。 然後在需要這個obj的模塊中添加
scull-y := main.o pipe.o access.o ex_obj.o

然後在源代碼中調用相應的函數,ok,可以了。

❿ 如何 fortran 編譯成 .obj

看你在何種操作平台(windows還是linux),是使用何種編譯器,何種版本?是通過集成環境,還是命令行編譯?

一般情況下,鍵入編譯器的名稱,空格,然後源代碼名稱就可以編譯為 obj 文件了。
比如 Intel Fortran,鍵入 ifort 源代碼.f90 既可。
某些編譯器可能會同時自動鏈接為exe,但是obj還是會為你保留的。

如果通過集成開發環境,通常按下編譯按鈕既可完成。而 obj 文件一般位於 Debug 文件夾或 Release 文件夾。

閱讀全文

與編譯obj相關的資料

熱點內容
蘋果版app是什麼 瀏覽:743
雲伺服器能更換地址 瀏覽:74
linux預讀演算法 瀏覽:556
視頻用什麼app編輯 瀏覽:68
編譯原理清華實驗 瀏覽:976
閑蛋app人氣怎麼樣 瀏覽:273
javacatch用法 瀏覽:859
京峰教育python 瀏覽:984
加密貨幣戰勝法定貨幣 瀏覽:685
混凝土結構中冊pdf 瀏覽:932
永劫無間解壓不了怎麼回事 瀏覽:811
php如何開啟curl 瀏覽:676
紅黃文件夾 瀏覽:127
違背皇帝的命令是死罪嗎 瀏覽:70
phpcurl處理錯誤 瀏覽:463
linuxftp防火牆埠設置 瀏覽:791
java面板圖片 瀏覽:486
泰拉瑞亞14安卓版怎麼操作 瀏覽:720
安卓手機相冊加密軟體 瀏覽:53
免費雲伺服器能永久使用嗎 瀏覽:705