您的位置:首页 > Web前端

Windows下配置vegaFem的方法

2016-01-03 15:58 246 查看
本文链接:Windows下配置vegaFem的方法 未经授权严禁转载

vegaFem配置

vegaFem是一个跨平台的开源库,用于做几何和材料的模拟。官网:http://run.usc.edu/vega/

vegaFem在linux下的配置比较容易,直接make就差不多了,博文/article/1638643.html详细介绍了配置和使用方法。而在windows下的配置就麻烦一些,需要根据源码用VS建工程生成.lib文件,然后像配置opengl那样放好.lib、.h文件才可以用。下面介绍了我的配置过程,操作系统是win10,编译平台为VS2013。

一,准备工作

先补充这么几个库:

1,opengl的gl/glu/glut/glex/glew/wglext/glui等库;

这几个库都比较简单,不再赘述。如果编译过程中发现有遗漏的其他opengl相关的库,再去添加即可。其中,glui库的源码在vegaFem的源码包里有,在libraries/glui文件夹下;也可以自行下载,官网http://glui.sourceforge.net/

2,pthread库

pthread库是做多线程的,这个库在linux下是默认使用的,而在windows下需要额外配置;官网http://sourceware.org/pthreads-win32/,配制方法参考/article/9469477.html。下载下来后解压,头文件、dll、lib文件都在Pre-built.2文件夹下,分别放好就可以了。

需要注意的是,dll/x64文件夹下的文件拷贝到C:\Windows\System32下,用于64位程序的运行;而dll/x86文件夹下的文件拷贝到C:\Windows\SysWOW64下,用于32位程序的运行。配置好了运行以下测试程序,没问题就可以了。

//main.cpp
#include <stdio.h>
#include <pthread.h>
#include <assert.h>

#pragma comment(lib,"x86/pthreadVC2.lib")

void* Function_t(void* Param)
{
printf("我是线程! ");
pthread_t myid = pthread_self();
printf("线程ID=%d ", myid);
return NULL;
}

int main()
{
pthread_t pid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&pid, &attr, Function_t, NULL);
printf("======================================== ");
getchar();
pthread_attr_destroy(&attr);
return 0;
}


3,cg库

参考博文/article/8835565.html进行配置,需要安装CgToolkit,文中有下载地址。安装好Cg Toolkit,再把头文件和lib文件分别放置好,就可以用了。

4,Intel的mkl库

这个库用于数学计算;下载地址https://software.intel.com/en-us/intel-mkl,只需要确认邮箱就可以下了,不过得下载整个产品(Intel Parallel Studio XE),乱七八糟的加起来得2+G;安装好之后,不必激活这个产品,因为我们只需要用它的mkl库。把mkl中各类库的地址添加到环境变量的系统路径中,这样就可以直接调用mkl的函数。

做好以上的准备工作,接下来编译vegaFem的lib文件。

二,编译lib文件

打开下载好的vegaFem的源码,找到libraries文件夹,这里一共有44个文件夹,除了include、lib、glui不用编译成lib文件,其他的都要,即需要编译41个项目。

1,

新建一个解决方案,命名为vegaFem,项目名为camera(这是第一个项目的名称),然后进入向导,应用程序类型选择“静态库”,附加选项去掉“预编译头”前的勾,如下图:



然后,依次在该解决方案中添加项目,将libraries文件夹下的41个项目都添加到该解决方案下。



注意这些项目的设置都跟第一个项目一致,即不带预编译头的静态库项目。

2,

将各个项目对应的头文件、源文件添加项目里。

3,

将所有文件夹里的头文件都整理到一个include文件夹(自建)下,然后对所有的项目添加引用,指向此include文件夹(属性-配置属性-VC++目录-包含目录)。这是因为项目之间有相互依赖关系,如果挨个配置会比较麻烦,因此把所有的头文件集中起来统一配置。



4,

编译。如果提示找不到opengl的库,可以继续添加对应的库;如果报告函数不安全的error,按提示修改配置即可。

编译后得到41个.lib文件,把这些文件全部整理出来,放在一个文件夹下;连同之前整理的所有的头文件,后续的测试会用得到。

三,测试example

vegaFem提供了几个example,在examples文件夹下。不过这些example只是配置文件,没有源码。查看make文件可以得知,example需要用utilities/interactiveDeformableSimulator文件下的源码编译成程序执行。因此接下来需要先编译interactiveDeformableSimulator。

新建一个VS项目,命名为interactiveDeformableSimulator,配置选择控制台应用程序-空项目。然后把utilities/interactiveDeformableSimulator文件夹下的源码和头文件添加过来。

接下来的设置类似于opencv的配置。先设置包含目录和库目录,在“属性-配置属性-VC++目录”下的包含目录和库目录内分别添加vegaFem的头文件和lib文件的路径。然后设置附加依赖项,找到“属性-配置属性-链接器-输入”,编辑附加依赖项,将所有vegaFem及pthread(需要用到)的lib文件名添加进去。





完成这些设置就可以编译了。编译得到一个exe可执行文件。

如果想查看example,以turtle为例,只需将刚才生成的interactiveDeformableSimulator.exe文件放到turtle.config同级目录下,打开命令行,找到当前文件夹,输入

interactiveDeformableSimulator.exe turtle.config
即可运行,效果如图:



表示运行成功。其他example同理可以运行。

编译过程中可能遇到的问题

错误内容:

fatal error LNK1281: 无法生成 SAFESEH 映像




链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的


解决方法:打开“属性-配置属性-链接器-命令行”,在附加选项键入:

/SAFESEH:NO


参考:/article/2013767.html

/article/4976704.html

错误内容:

error C1041: 无法打开程序数据库……如果要将多个CL.EXE 写入同一个 .PDB 文件,请使用 /FS


解决方法:按照错误内容所提示的,打开“属性-链接器-命令行”,添加

/FS


到“附加选项”;或者,打开“属性-C/C++-常规”,找到“调试信息格式”,设为“C7 兼容(/Z7)”。

参考:http://home.eeworld.com.cn/my/space-uid-291513-blogid-239457.html

错误内容:

error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”:


解决方法:这个错误是因为Debug下使用了Release的库文件。记得opencv的库文件有的后面带d,有的不带,前者是debug的库文件,后者是release的。此处同理。将Debug改为Release就可以了。

参考:http://www.tuicool.com/articles/Zvi6ry

/article/1503869.html

错误内容:

error LNK2001: 无法解析的外部符号


解决方法:这个错误多是因为配置的问题,比如虽然设好了包含路径和库路径,但是没有添加附加依赖项。

参考:http://blog.csdn.net/lanyang123456/article/details/5495880
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: