Brew —– lib的編譯以及使用

來源:互聯網
上載者:User

轉載自:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.