以文本方式查看主题 - 中文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 |