转载自:
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