簡介
NVIDIA PhysX SDK是可擴(kuò)展的多平臺物理解決方案,支持從智能手機(jī)到高端多核CPU和GPU的各種設(shè)備。 PhysX已經(jīng)集成到一些最受歡迎的游戲引擎中,包括虛幻引擎和Unity3D。
配置安裝流程
1.配置編譯環(huán)境
1)安裝wget包
yum install wget -y
2)安裝Python 2.7.6或以上版本
請參考http://m.cqfng.cn/kunpeng/software/python.html安裝Python2或者h(yuǎn)ttps://m.cqfng.cn/kunpeng/software/python3.htmlan安裝Python3。
3)安裝CMake 3.12或以上版本
yum install cmake3 -y
ln -s /usr/bin/cmake3 /usr/bin/cmake
----結(jié)束
2.獲取源碼
獲取“PhysX-3.4.2-bsd”源碼包。
cd /usr/local/src
wget https://github.com/NVIDIAGameWorks/PhysX/archive/3.4.2-bsd.tar.gz -O PhysX-3.4.2-bsd.tar.gz
3.編譯和安裝
1)解壓軟件包。
tar -zxvf PhysX-3.4.2-bsd.tar.gz
2)重命名并且移動
rm -rf /usr/local/physx
mv PhysX-3.4.2-bsd /usr/local/physx
3)進(jìn)入PhysX編譯目錄。
cd /usr/local/physx/PhysX_3.4/Source/compiler/linux64
4)編譯PhysX
make -j4
編譯過程中會報錯,請參考故障排除解決報錯問題
5)將生成的動態(tài)庫的路徑添加到ld.so.conf配置。
a)修改“/etc/ld.so.conf”文件。
vim /etc/ld.so.conf
在文件末尾添加如下內(nèi)容:
/usr/local/physx/PxShared/bin/linux64/
/usr/local/physx/PhysX_3.4/Bin/linux64/
b)使配置修改生效。
ldconfig -f /etc/ld.so.conf
c)檢查配置是否生效。
ldconfig -p
----結(jié)束
4. 運(yùn)行和驗證
1)執(zhí)行如下命令,檢查生成的動態(tài)庫和靜態(tài)庫。
a)檢查生成的靜態(tài)庫。
cd /usr/local/physx/PhysX_3.4
find -name "*.a"
當(dāng)系統(tǒng)回顯類似如下信息時,表示生成的靜態(tài)庫成功。

b)檢查生成的動態(tài)庫。
cd /usr/local/physx/PhysX_3.4
find -name "*.so"
當(dāng)系統(tǒng)回顯類似如下信息時,表示生成的動態(tài)庫成功。

2)選擇SnippetHelloWorld.cpp進(jìn)行測試。
a)進(jìn)入SnippetHelloWorld目錄。
cd /usr/local/physx/PhysX_3.4/Snippets/SnippetHelloWorld/
b)編輯SnippetHelloWorld.cpp,修改代碼中的snippetMain為main。
c)編寫makefile文件。
vim makefile
內(nèi)容如下:
BINARY = $(patsubst %.cpp,%,$(wildcard *.cpp))
DEBUG_FLAG=-g -Werror -Wall -fPIC -fno-strict-aliasing -I ../../Include/ -I ../../../PxShared/include/ -DNDEBUG \
-L ../../Bin/linux64/ \
-lPxFoundationDEBUG_x64 \
-lPhysX3CommonDEBUG_x64 \
-lPhysX3DEBUG_x64 \
-lPhysX3CookingDEBUG_x64 \
-lPhysX3PROFILE_x64 \
-lPhysX3CommonPROFILE_x64 \
-lPhysX3CharacterKinematicDEBUG_x64 \
-L ../../Lib/linux64/ \
-lLowLevel \
-lPhysX3Extensions \
-l PhysX3Vehicle \
-l SceneQuery \
-l SimulationController \
-L ../../../PxShared/bin/linux64/ \
-lPxFoundationDEBUG_x64 \
-lPxPvdSDKDEBUG_x64 \
-lPxFoundationPROFILE_x64 \
-lPxPvdSDKPROFILE_x64 \
-L ../../../PxShared/lib/linux64/ \
-lPsFastXmlDEBUG \
-lPxTaskDEBUG \
-lpthread -ldl -rdynamic
RELEASE_FLAG = -Werror -Wall -fPIC -fno-strict-aliasing -I ../../Include/ -I ../../../PxShared/include/ -DNDEBUG \
-L ../../Bin/linux64/ \
-lPxFoundation_x64 \
-lPhysX3Common_x64 \
-lPhysX3_x64 \
-lPhysX3Cooking_x64 \
-lPhysX3PROFILE_x64 \
-lPhysX3CommonPROFILE_x64 \
-lPhysX3CharacterKinematic_x64 \
-L ../../Lib/linux64/ \
-lLowLevel \
-lPhysX3Extensions \
-l PhysX3Vehicle \
-l SceneQuery \
-l SimulationController \
-L ../../../PxShared/bin/linux64/ \
-lPxFoundation_x64 \
-lPxPvdSDK_x64 \
-lPxFoundationPROFILE_x64 \
-lPxPvdSDKPROFILE_x64 \
-L ../../../PxShared/lib/linux64/ \
-lPsFastXml \
-lPxTask \
-lpthread -ldl -rdynamic
#all:$BINARY)
all:SnippetHelloWorld.cpp
g++ SnippetHelloWorld.cpp $(DEBUG_FLAG)
注意:“g++ SnippetHelloWorld.cpp $(DEBUG_FLAG)”前面是Tab鍵
d)編譯SnippetHelloWorld.cpp生成a.out。
make all
e)執(zhí)行SnippetHelloWorld。
./a.out
當(dāng)系統(tǒng)回顯類似如下信息時,表示安裝PhysX成功,可以正常使用。
[root@ecs SnippetHelloWorld]# ./a.out
SnippetHelloWorld done.
----結(jié)束
5. 故障排除
問題一:編譯報“unrecognized command line option "-m64"”等錯誤
問題描述:
進(jìn)入PhysX-3.4-master/PhysX_3.4/Source/compiler/linux64目錄,執(zhí)行make時,提示信息如下:

問題原因:下載子模塊速度太慢導(dǎo)致終端。
-m64,-msse2,-mfpmath=sse是x86 64位應(yīng)用編譯選項,為AMD的x86 64架構(gòu)生成代碼。在ARM64平臺無法支持。
解決方法:
執(zhí)行如下命令將PhysX-3.4-master/PhysX_3.4/Source/compiler/linux64目錄下所有文件中涉及的標(biāo)識-m64,-msse2,-mfpmath=sse替換掉
(1)將當(dāng)期目錄下所有文件中內(nèi)容“-m64”替換為“ ”
sed -i 's/-m64/ /g’`grep '\-m64' -rl ./`
(2)將當(dāng)期目錄下所有文件中內(nèi)容“-mfpmath=sse”替換為“ ”
sed -i 's/-msse2/ /g’`grep '\-msse2' -rl ./`
(3)將當(dāng)期目錄下所有文件中內(nèi)容“-mfpmath=sse”替換為“ ”
sed -i 's/-mfpmath=sse/ /g’`grep '\-mfpmath=sse' -rl ./`
(4)重新編譯
make
問題二:編譯報“error argument 1 null where non null expected werror nonnull”等錯誤
問題描述:
進(jìn)入PhysX-3.4-master/PhysX_3.4/Source/compiler/linux64目錄,執(zhí)行make時,報“werror nonnull”錯誤,截圖如下:

問題原因:gcc的編譯選項-Wall 打開gcc的所有警告-Werror,它要求gcc將所有的警告當(dāng)成錯誤進(jìn)行處理,所以報錯了。
解決方法:
不要將警告當(dāng)錯誤處理,執(zhí)行如下命令, 將當(dāng)期目錄下所有文件中內(nèi)容“-Werror”替換為“ ”。
sed -i 's/-Werror/ /g’`grep '\-Werror' -rl ./`