歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

在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 版本都有自動依賴解析機制,會讓人抓狂的

Copyright © Linux教程網 All Rights Reserved