参考原文:https://sourceforge.net/apps/trac/openvrml/wiki/BuildOpenvrmlOnWindows
Original version copyright (C) Zack Smith 2008
今天花了一整天的时候配置编译环境并编译,尽管仍未编译成功,但已将错误减少至两处,而且这剩下的两处也应该是我对VC不了解而出现的,希望能很快解决。 注:build在文中被译作构建,可能有点别扭。。。
从http://openvrml.org/download 获取OpenVRML 分发 (发行包或Subversion处最新源码) 。
如果你还没有微软的编译器,你可以使用免费版 Visual C++ Express 。
用 BoostPro Computing 的 freely available installer 来构建Windows下的Boost。
至少要为最新版本的Microsoft Visual C++ 编译器(当前为9.0)安装"Multithread" 和 "Multithread Debug"变体的库。注:这个工具可以根据需要下载源文件和预编译的库文件,根据后面编译的情况来看,应该还要选date_time、system、thread等。
The installers for versions 1.37.0 and 1.38.0 appear to have a glitch such that checking the boxes to install the variants globally for all libraries may not actually result in that selection propagating to the individual libraries. Make sure that you expand the tree of available variants to install and specifically check the "Multithread" and "Multithread Debug" variants.
Visual C++ 9.0 的解决方案文件可以在OpenVRML的如下目录找到
ide-projects/Windows/VisualC9_0/OpenVRML/OpenVRML.sln
OpenVRML 依赖于很多库 - 每一个都要单独下载,并且必须要将它们的include和library目录添加到Visual C++路径列表中。下面的步骤阐明了如何添加到路径列表。
C:/Program Files/boost/boost_1_38_0
C:/Program Files/boost/boost_1_38_0/lib
C:/Users/Joe/freetype-2.3.9/objs/win32/vc2008
C:/Users/Joe/freetype-2.3.9/include
C:/Users/Joe/lpng1235/projects/visualc71/Win32_LIB_Debug C:/Users/Joe/lpng1235/projects/visualc71/Win32_LIB_Release
C:/Users/Joe/zlib C:/Users/Joe/lpng1235
最简单的是从Mozilla下载预编译形式的代码XULRunner:ftp://ftp.mozilla.org/pub/xulrunner/releases/ 。
获取SDK版本,提取出来。将的lib目录添加到Visual C++的库文件目录列表。形式如下:
C:/Users/Joe/xulrunner-sdk/lib
将的 SpiderMonkey? include目录添加到Visual C++的包含文件目录列表。形式如下:
C:/Users/Joe/xulrunner-sdk/include/js
你有两个选择:下载预编译的DLL文件加上include文件,或者自己来构建 。预编译的可以去http://www.libsdl.org/download-1.2.php 下载。所包含的DLL文件将会被放到OpenVRML的二进制目录。
注:直接用DLL文件似乎不行,它调用的静态链接文件,需要下载源码编译为lib文件。
我们需要添加一个命令行参数来浏览文件,如为了测试可执行文件。右键单击sdl-viewer项目,点击属性,调试,命令参数。添加内容类似如下:
file:///c:/users/YOURNAME/desktop/openvrml/models/snoman.wrl
生成的唯一可执行文件为 sdl-viewer.exe。
将openvrml/data目录的完整路径设置到环境变量 OPENVRML_DATA。在Vista下形式如:
c:/users/YOURNAME/desktop/openvrml/data
或在XP下:
c:/docume~1/YOURNAME/desktop/openvrml/data
在sdl-viewer项目上右键单击,然后选择"设置为启动项目"
如果你希望运行带有Javascript的VRML/X3D文件,你需要做两件事:首先,设置OPENVRML_SCRIPT_PATH 环境变量;然后,复制 JSAPI's js2350.dll 与 nspr4.dll 到OpenVRML的二进制目录。
The application failed to initialize property (0xE06D7363)this may indicate that your OPENVRML_DATADIR environment variable is unset or incorrectly set. In an ideal world, this problem would result in a MessageBox() call; but presently it doesn't.
rm `find . -name "*.obj"` rm `find . -name "*.lib"` rm `find . -name "*.dll"` rm `find . -name "*.exe"`Don't forget the "-name" part! Forgetting it will remove everything.
下面贴出错误代码,有高手请指点一下:
1>正在链接...
1> 正在创建库 E:/X3D/Soft/openvrml-0.18.3/ide-projects/Windows/VisualC9_0
/OpenVRML/Release/lib/openvrml.lib 和对象 E:/X3D/Soft/openvrml-0.18.3/ide-
projects/Windows/VisualC9_0/OpenVRML/Release/lib/openvrml.exp
1>node_metatype_registry_impl.obj : error LNK2001: 无法解析的外部符号 "struct HINSTANCE__ *
__cdecl openvrml::local::dl::open(class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > const &)" (?
open@dl@local@openvrml@@YAPAUHINSTANCE__@@ABV?$basic_string@DU?$char_traits@D@std@@V?
$allocator@D@2@@std@@@Z)
1>node_metatype_registry_impl.obj : error LNK2001: 无法解析的外部符号 "void * __cdecl
openvrml::local::dl::sym(struct HINSTANCE__ *,class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > const &)" (?
sym@dl@local@openvrml@@YAPAXPAUHINSTANCE__@@ABV?$basic_string@DU?$char_traits@D@std@@V?
$allocator@D@2@@std@@@Z)
1>node_metatype_registry_impl.obj : error LNK2001: 无法解析的外部符号 "int __cdecl
openvrml::local::dl::foreachfile(class std::vector<class boost::filesystem::basic_path<class
std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct
boost::filesystem::path_traits>,class std::allocator<class
boost::filesystem::basic_path<class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> >,struct boost::filesystem::path_traits> >
> const &,int (__cdecl*)(class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > const &,void *),void *)" (?foreachfile@dl@local@openvrml@@YAHABV?
$vector@V?$basic_path@V?$basic_string@DU?$char_traits@D@std@@V?
$allocator@D@2@@std@@Upath_traits@filesystem@boost@@@filesystem@boost@@V?$allocator@V?
$basic_path@V?$basic_string@DU?$char_traits@D@std@@V?
$allocator@D@2@@std@@Upath_traits@filesystem@boost@@@filesystem@boost@@@std@@@std@@P6AHABV?
$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@PAX@Z2@Z)
1>node_metatype_registry_impl.obj : error LNK2001: 无法解析的外部符号 "int __cdecl
openvrml::local::dl::close(struct HINSTANCE__ *)" (?
close@dl@local@openvrml@@YAHPAUHINSTANCE__@@@Z)
1>node_metatype_registry_impl.obj : error LNK2001: 无法解析的外部符号 "class
std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const
__cdecl openvrml::local::dl::error(void)" (?error@dl@local@openvrml@@YA?BV?
$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
1>node_metatype_registry_impl.obj : error LNK2001: 无法解析的外部符号 "int __cdecl
openvrml::local::dl::init(void)" (?init@dl@local@openvrml@@YAHXZ)
1>node_metatype_registry_impl.obj : error LNK2001: 无法解析的外部符号 "int __cdecl
openvrml::local::dl::exit(void)" (?exit@dl@local@openvrml@@YAHXZ)
1>E:/X3D/Soft/openvrml-0.18.3/ide-projects/Windows/VisualC9_0
/OpenVRML/Release/bin/openvrml.dll : fatal error LNK1120: 7 个无法解析的外部命令
1>生成日志保存在"file://e:/X3D/Soft/openvrml-0.18.3/ide-projects/Windows/VisualC9_0
/OpenVRML/openvrml/Release/BuildLog.htm"
1>openvrml - 8 个错误,2 个警告
14>LINK : fatal error LNK1104: 无法打开文件"LIBC.lib"
14>生成日志保存在"file://e:/X3D/Soft/openvrml-0.18.3/ide-projects/Windows/VisualC9_0
/OpenVRML/vrml97/Release/BuildLog.htm"
14>vrml97 - 1 个错误,1 个警告
19>正在链接...
19> 正在创建库 E:/X3D/Soft/openvrml-0.18.3/ide-projects/Windows/VisualC9_0
/OpenVRML/Release/bin/sdl-viewer.lib 和对象 E:/X3D/Soft/openvrml-0.18.3/ide-
projects/Windows/VisualC9_0/OpenVRML/Release/bin/sdl-viewer.exp
19>SDL.lib(SDL_systimer.obj) : error LNK2001: 无法解析的外部符号 __imp__timeGetTime@0
19>SDL.lib(SDL_systimer.obj) : error LNK2001: 无法解析的外部符号 __imp__timeBeginPeriod@4
19>SDL.lib(SDL_systimer.obj) : error LNK2001: 无法解析的外部符号 __imp__timeSetEvent@20
19>SDL.lib(SDL_systimer.obj) : error LNK2001: 无法解析的外部符号 __imp__timeEndPeriod@4
19>SDL.lib(SDL_systimer.obj) : error LNK2001: 无法解析的外部符号 __imp__timeKillEvent@4
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _GUID_POV
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _GUID_Slider
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _GUID_RzAxis
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _GUID_RyAxis
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _GUID_RxAxis
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _GUID_ZAxis
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _GUID_YAxis
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _GUID_XAxis
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _GUID_Key
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _IID_IDirectDrawSurface3
19>SDL.lib(SDL_dx5yuv.obj) : error LNK2001: 无法解析的外部符号 _IID_IDirectDrawSurface3
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号 _IID_IDirectDraw2
19>SDL.lib(SDL_dx5video.obj) : error LNK2001: 无法解析的外部符号
_IID_IDirectDrawGammaControl
19>SDL.lib(SDL_syscdrom.obj) : error LNK2001: 无法解析的外部符号
__imp__mciGetErrorStringA@12
19>SDL.lib(SDL_syscdrom.obj) : error LNK2001: 无法解析的外部符号 __imp__mciSendCommandA@16
19>SDL.lib(SDL_mmjoystick.obj) : error LNK2001: 无法解析的外部符号 __imp__joyGetDevCapsA@12
19>SDL.lib(SDL_mmjoystick.obj) : error LNK2001: 无法解析的外部符号 __imp__joyGetPosEx@8
19>SDL.lib(SDL_mmjoystick.obj) : error LNK2001: 无法解析的外部符号 __imp__joyGetNumDevs@0
19>SDL.lib(SDL_dibaudio.obj) : error LNK2001: 无法解析的外部符号 __imp__waveOutWrite@12
19>SDL.lib(SDL_dibaudio.obj) : error LNK2001: 无法解析的外部符号
__imp__waveOutUnprepareHeader@12
19>SDL.lib(SDL_dibaudio.obj) : error LNK2001: 无法解析的外部符号 __imp__waveOutClose@4
19>SDL.lib(SDL_dibaudio.obj) : error LNK2001: 无法解析的外部符号
__imp__waveOutPrepareHeader@12
19>SDL.lib(SDL_dibaudio.obj) : error LNK2001: 无法解析的外部符号 __imp__waveOutOpen@24
19>SDL.lib(SDL_dibaudio.obj) : error LNK2001: 无法解析的外部符号
__imp__waveOutGetErrorTextA@12
19>SDL.lib(SDL_dx5events.obj) : error LNK2001: 无法解析的外部符号 _GUID_SysMouse
19>SDL.lib(SDL_dx5events.obj) : error LNK2001: 无法解析的外部符号 _GUID_SysKeyboard
19>SDL.lib(SDL_dx5events.obj) : error LNK2001: 无法解析的外部符号 _IID_IDirectInputDevice2A
19>E:/X3D/Soft/openvrml-0.18.3/ide-projects/Windows/VisualC9_0/OpenVRML/Release/bin/sdl-
viewer.exe : fatal error LNK1120: 31 个无法解析的外部命令
19>生成日志保存在"file://e:/X3D/Soft/openvrml-0.18.3/ide-projects/Windows/VisualC9_0
/OpenVRML/sdl-viewer/Release/BuildLog.htm"
19>sdl-viewer - 33 个错误,0 个警告
Powered by Zoundry Raven