在64位Linux下编译dtAgeiaPhysX
dtAgeiaPhysX是Delta3D 的一个插件,封装了 nVidia 的 PhysX.为了使用它,当然也就要编译Delta3D.不幸的是,编译 Delta3D 已经是一个不小的工作, PhysX 没有64位版本,这样的话,所有的相关软件都得安装或编译32位版本.麻烦程度远超俺滴想象.要说明一下,好象 Delta3D svn 库里的 CMakeLists.txt 文件是有点问题的,我已经修正过了,不过已经不记得改了些什么,总之不是很难,这里就不记了. 总的说,64位系统绝大多数32位软件或库都没有有安装的,,编译过程经常遇到 incompatible 的库文件之类的错误,这个时候,可以用 rpm -qf 库文件全路径名 来查一下到底是那个库.知道了库名字,就可以用 yum install 库名字.i586 来安装它的32位版本了.安装的时候很容易出现冲突(部分文件与64位版本重复),安装不成功,需要鉴别一下,如果只是 doc 或 include 之类的文件有冲突的话,可以大胆的覆盖,这时候可以到 /var/cache/yum/ 中相应的子目录中去找到下载的 rpm 包,用 rpm -ivh --force rpm文件名 来强制覆盖安装. 苦恼的是,CMake 脚本通常通过 CMAKE_SIZEOF_VOID_P 是否为 8 来判定是否为 64 位系统,这样一来,32位库也会被安装到 lib64 目录里去.我想,要么改 CMakeLists.txt ,直接设置目标目录为 lib,要不,就只好不用 make install 了,自己手动安装.郁闷.没有办法告诉 cmake 说我要编译 32 位版本吗?--改了 CMakeLists.txt,直接把 LIB_POSTFIX 设为空完事. Delta3D : 一个开源3D仿真/游戏引擎软件,集成了很多相关组件,如 ODE 、 OpenDIS 、 OpenAL 等等,几乎具备了直接制作 3D 仿真系统或游戏的能力.3D方面主要基于 OSG . 修改 CMakeLists.txt 文件,找到合适的位置,在 CMAKE_CXX_FLAGS 中加入 -m32 参数,强制编译成 32 位版本.如果实在不想找,就在最末尾直接加上: SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32". 下面几个问题应该是 GCC 版本引起的,看来是新版本的 GCC 中 cstdio 不再作为默认包含的头文件了. 中 snprintf 未定义,修改此文件,加入 #include <cstdio> 就好. 中 va_list 未定义,同上,修改此文件,加入 #include <cstdio> 就好.
中 fpos_t 未定义,处理同上. 不知为什么死活要找 /usr/local/lib64/libgne.a,强行改 CMakeModules/FindGNE.cmake 文件,直接赋值.现在怀疑是 cache 的问题. OSG : 全称 Open Scene Graph ,基本上是 OpenGL 的 C 封装,不过提供了相当多的高级功能,基本上是一个完整的 3D 引擎. dtAgeiaPhysX : 是 nVidia PhysX 物理引擎(原是 Ageia 公司开发的,此公司已被 nVidia 收购)的封装,针对 Delta3D 集成. OpenDIS : 它没有用 CMake ,麻烦一些,要加入 -m32 参数,去改 Makefile 吧,不过它的主 Makefile 里什么也没有,倒是另有 4 个 Makefile,一个 DIS.mak 是主要的,另外有两个 example 的 .mak 文件,以及一个单元测试的 .mak 文件,没办法,一个个改吧. HawkNL : GNElib : gdal : 这个家伙其实是个比较通用的库,不应该列在这里,不过它出现的情况比较特殊,还不到连接的时候,就以编译错误的形式出现,和其它库的情况不同.其实也是没有 32 位包,它就少了一个 cpl_config-32.h 头文件,装上32位包……在我的系统上它一家伙带上了 17 个“家属”软件--要不是现代 Linux 版本都有自动依赖解析机制,会让人抓狂的.
|
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |