一步步实现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按上面的步骤来就是了。没什么好说的。
|
阅读全文(3636) | 回复(0) | 编辑 | 精华 |
|
« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
Blog信息 |
blog名称: 日志总数:33 评论数量:61 留言数量:-8 访问次数:235367 建立时间:2006年4月27日 | |

|