以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML在语音技术中的应用 』   (http://bbs.xml.org.cn/list.asp?boardid=47)
----  一步步实现OpenVXI (二)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=47&rootid=&id=35925)


--  作者:zhu_ruixian
--  发布时间:7/22/2006 9:15:00 PM

--  一步步实现OpenVXI (二)
四.编译OpenVXI
3.编译value
在Visual Stdio.NET中的解决方案管理器中,右击myOpenVXI,然后选”添加”->新建项目。在对话框中选”Visual C++项目”->Win32->Win32项目,名称:value 位置:E:\work\myOpenVXI(这个应该是默认的),点击“确定”。右键点击swichar->属性->配置属性->常规->输出目录,把输出目录改为”..\bin”,点“确定“。然后把src\value下面的cpp文件和头文件拷到E:\work\myOpenVXI\value目录,然后加入工程。右键点击value工程,然后点生成。如果头文件找不到,修改头文件的路径如下:
#include "..\include\*.h"
如果有WIN32的条件编译,加上
#ifndef WIN32
#define WIN32
#endif
如果上面设置好了之后,编译仍然有问题,打开value工程,Value工程共有4个cpp文件,其中有两个文件为ValueNoSTL.cpp和ValueSTL.cpp。二者只能选其一。STL是标准模板库的缩写。我们选择ValueSTL.cpp,把ValueNoSTL.cpp从工程移除。然后再编译。我们就可以在E:\work\myOpenVXI\bin目录下找到生成的Value.dll和 value.lib了。
打开类视图,你可以发现value实际上是一个VXIValue类,然后派生了13个子类。Value的功能是,定义了OpenVXI自己的数据类型, OpenVXI里面找不到基本的数据类型,全部OpenVX另外定义的。这样,value也编译好了。很简单!
4.编译trd
   在Visual Stdio.NET中的解决方案管理器中,右击myOpenVXI,然后选”添加”->新建项目。在对话框中选”Visual C++项目”->Win32->Win32项目,名称:trd 位置:E:\work\myOpenVXI(这个应该是默认的),点击“确定”。右键点击trd->属性->配置属性->常规->输出目录,把输出目录改为”..\bin”,点“确定“。然后把src\trd下面的cpp文件和头文件拷到E:\work\myOpenVXI\value目录,然后加入工程。右键点击trd工程,然后点生成。
   有错误,和上面的处理方法一样,先修改头文件。然后是添加宏定义。处理完之后,编译会有一个,前面没有过的错误:
e:\work\myOpenVXI\trd\trdUtil\SBtrdMutex.cpp(346): error C2065:
“COMPANY_DOMAIN” : 未声明的标识符
有必要解释一下,COMPANY_DOMAIN是OpenVXI的设计者留下让我们自己定义的。你可以定义为:#define  COMPANY_DOMAIN  L"公司的名称"
我把它定义为如下: L“”是一个宏。
#define  COMPANY_DOMAIN  L"my"
然后,编译。仍然会报错。我们打开SBtrdPthreads.cpp文件,会在注释里面找到这样的内容:
/*****************************************************************************
* SBtrd API implementation
* This provides the Linux implementation of the VXItrd API for basic
* thread operations and locks.*/
内容这个文件是OpenVXI的设计者为Linux写的,我们不需要。从工程移除即可。然后再编译,应该就能生成dll文件和相应的lib文件。这样trd的工作也完成了。打开类视图,你可以一目了然的浏览所有的类,仅从名称上就可以知道,这个模块是操作线程的。这两个工程没有用到*.def文件,这是因为他们用的是另外的方式导出函数,一种就是声明为:extern "C" __declspec(dllexport)  另一种就是声明为static的类型。也不难对吧!好继续。
5. 编译log和 cache
步骤和上面的一模一样。我就不罗嗦了。值得一提得是,SBlog.cpp中定义__THREADED宏,和在SBlogMapper.cpp中定义HAVE_XERCES宏。不定义,有可能编译通过,但是后面使用的时候会有问题。
#ifndef HAVE_XERCES
#define HAVE_XERCES
#endif
定义完HAVE_XERCES后编译,一个错误就是:
e:\work\myOpenVXI\log\SBlogMapper.cpp(52): fatal error C1083: 无法打开包含文件:“util/PlatformUtils.hpp”: No such file or directory
这就要用到了xerces,把xerces-c_2_6_0\include目录下的文件夹拷到..\Microsoft Visual Studio .NET\include文件夹,然后把
#include <util/PlatformUtils.hpp>改成如下,其余类似。
#include <xercesc/util/PlatformUtils.hpp>  
还有一个就是,链接的时候出问题,右键点log工程->属性->链接器->输入->附加依赖项,输入“..\bin\trd.lib ..\bin\value.lib” xerces-c_2_6_0\lib目录下的文件也拷到trd.lib所在的目录下。附加依赖项中再输入:
..\bin\xerces-c_2D.lib ..\bin\xerces-depdom_2.lib ..\bin\xerces-depdom_2D.lib ..\bin\xerces-c_2.lib
然后再次生成log工程。如果正常,也能在bin下看到log.dll和log.lib了。Log模块也做完了。
Cache按上面的步骤来就是了。没什么好说的。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
6,980.469ms