在64位Linux下编译dtAgeiaPhysX

系统 Linux
dtAgeiaPhysX是Delta3D 的一个插件,封装了 nVidia 的 PhysX。为了使用它,当然也就要编译Delta3D。不幸的是,编译 Delta3D 已经是一个不小的工作,而且 PhysX 没有64位版本,这样的话,所有的相关软件都得安装或编译32位版本。

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 版本都有自动依赖解析机制,会让人抓狂的。
 

【编辑推荐】

  1. 如何在Windows中编译Linux/Unix代码
  2. Linux Shell变量的使用轻松学习
  3. Linux shell学习之:unix/linux shell的发展历程
责任编辑:赵宁宁 来源: chinaitlab
相关推荐

2009-08-27 10:31:36

ChromiumLinux64位程序

2011-07-01 13:31:29

Ubuntu Linux QVFB

2015-10-28 10:21:54

WineUbuntu 15.1Linux

2011-01-10 14:48:22

2013-10-10 13:46:18

iOS 764位

2010-02-02 15:13:42

Linux ARM

2015-11-11 15:19:13

Linux编译调试

2011-08-09 15:47:46

LeveldbLinuxC++

2009-06-23 18:55:40

Linux

2009-08-21 10:03:29

Google ChroLinuxChrome

2009-08-27 10:01:03

GoogleLinuxChrome

2009-08-12 17:36:32

2014-05-20 10:55:36

Linux操作系统

2011-09-14 15:04:47

Android 2.2

2010-12-17 17:25:22

Office 2010

2011-08-29 16:31:30

UbuntuAndroid

2009-06-22 10:39:31

ibmdwLouts

2017-12-28 10:26:31

系统CPU64位

2018-04-10 15:10:34

Windows64位32位

2014-08-07 10:49:35

CentosCentos 6.5
点赞
收藏

51CTO技术栈公众号