轉載自:
http://blog.csdn.net/luckwangjing/archive/2010/05/18/5603824.aspx
但有一定不同,,因為本人的編譯環境是 ADS1.2
注 :
1. 開發環境 :VS2005 + BREW SDK 3.1.5 SP02 + BREW SDK TOOLS 1.1.0 SP06
2. 編譯環境 : ADS1.2
3. 開發語言 :C 語言
一、 lib的編譯
1. 建立 lib 工程
按正常方式建立 BREWAppWizard 工程 , 就以 brewlib 為工程名 , 工程裡將會有 brewlib.c, AEEAppGen.c,AEEModGen.c 三個檔案 , 移除 AEEAppGen.c , AEEModGen.c 檔案 , 到 BREWDIR/sdk/src 目錄 (BREWDIR 為 Brew SDK 安裝目錄 ), 複製 AEEModGen.c 檔案到工程目錄並添加到工程 , 再建立 brewlib.h 檔案到工程目錄 , 此時工程目錄如所示 .
開啟 AEEModGen.c 並刪除裡面的所有內容 , 添加以下代碼:
#include "AEEStdLib.h"
#ifdef AEE_LOAD_DLL
__declspec(dllexport)
#endif
int AEEMod_Load(IShell *pIShell, void *ph, IModule **ppMod)
{
return SUCCESS;
}
開啟 brewlib.c 檔案,刪除所有內容。
開啟工程屬性--> 常規 --> 配置類型--> 選擇靜態庫 (.lib), 點擊確定完成配置 .
此時 lib 的工程模板已經完成 .
2. 產生模擬器可以使用的 lib 檔案
現在我們試著寫一個 lib ,添加一個函數
開啟 brewlib.h 檔案 , 添加以下代碼 :
#ifndef _BREWLIB_H
#define _BREWLIB_H
#include <AEEStdLib.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _DEBUG
#pragma comment(linker, "/nodefaultlib:libcmt.lib")
#endif
int add(int x, int y);
#ifdef __cplusplus
}
#endif
#endif
然後開啟 brewlib.c 檔案添加以下代碼 :
#include "brewlib.h"
int add(int x, int y)
{
return x+y;
}
此時用 VS2005 編譯一下在工程目錄裡即可產生 lib 檔案,此 lib 檔案只能在模擬器上面使用。
3. 產生真機可以使用的 o 檔案
先產生 brewlib.mak 檔案。
再mak 編譯該工程 . 產生一些 o 檔案 ,
特別注意:對於cpp檔案 如果有類的定義, 必須 包含對 new delete 的重載,否則mak出錯
brewlib.o 檔案就是真機使用的檔案。其中 brewlib.h 檔案就是其他工程需要引用的標頭檔 .
二、 lib 的使用
按正常方式建立 BREWAppWizard 工程 , 建立一個 UseLib 工程 . 拷貝 brewlib.h , brewlib.lib , brewlib.o 檔案到工程目錄。
開啟 UseLib.c 檔案,
開啟 UseLib 工程屬性--> 連接器--> 輸入--> 附加依賴項,添加 brewlib.lib 。
我們先測試一下 int add (int x,int y); 方法。
此時編譯工程,如果有
brewlib.lib(brewlib.obj) : warning LNK4099: 未找到PDB “vc80.pdb ”( 使用“brewlib.lib ”或在“d:/BrewWorkSpace/BrewLib/UseLib/vc80.pdb ”中尋找) ;正在連結化物件,如同沒有調試資訊一樣
警告,沒有關係,不用理睬。
這時候用模擬器就可以運行了。
如果要編譯到真機運行 , 產生 UseLib.mak 檔案,mak檔案作一下修改。
將下面的內容
$(TARGET).$(EXETYPE) : $(APP_OBJS)
@echo ---------------------------------------------------------------
@echo TARGET $@
$(LD) $(LINK_CMD) $(TARGET).$(EXETYPE) $(LFLAGS) $(APP_OBJS) $(LINK_ORDER)
改為
$(TARGET).$(EXETYPE) : $(APP_OBJS)
@echo ---------------------------------------------------------------
@echo TARGET $@
$(LD) $(LINK_CMD) $(TARGET).$(EXETYPE) $(LFLAGS) $(APP_OBJS) $(LINK_ORDER) brewlib.o
就是吧brewlib.o 加上去
然後mak 編譯該工程 . 產生 UseLib.mod 檔案, UseLib.mod 檔案就是真機上面的可執行檔。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/luckwangjing/archive/2010/05/18/5603824.aspx
本人註:非常感謝 luckwangjing, 3ks