Brew ----- lib的编译以及使用

转载自:

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 文件到工程目录 , 此时工程目录如下图所示 .

 

 Brew ----- lib的编译以及使用_第1张图片

打开 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

你可能感兴趣的:(Brew ----- lib的编译以及使用)