文档首页 > > 移植指南> 其他> 移植PhysX> 移植指导

移植指导

分享
更新时间:2020/11/02 GMT+08:00

介绍

简要介绍

NVIDIA PhysX SDK是可扩展的多平台物理解决方案,支持从智能手机到高端多核CPU和GPU的各种设备。 PhysX已经集成到一些最受欢迎的游戏引擎中,包括虚幻引擎和Unity3D。

开发语言:C/C++

一句话描述:多平台物理解决方案

开源协议:BSD 3

建议的版本

根据实际需要选择版本,本文档以“PhysX-3.4.2-bsd”为例进行说明。

环境要求

云服务器要求

本文以云服务器KC1实例测试,云服务器配置如表1所示。

表1 云服务器配置

项目

说明

规格

kc1.large.2 | 4vCPUs | 8GB

磁盘

系统盘:高IO(40GB)

操作系统要求

操作系统要求如表2所示。

表2 操作系统要求

项目

说明

下载地址

CentOS

7.6

在公共镜像中已提供。

Kernel

4.14.0

在公共镜像中已提供。

配置编译环境

  1. 安装wget包。

    yum install wget -y

  2. 安装Python 2.7.6或以上版本

    请参见https://support.huaweicloud.com/prtg-kunpengcpl/python_01_0001.html安装Python 2或者https://support.huaweicloud.com/prtg-kunpengcpl/python_02_0001.html安装Python 3。

  3. 安装CMake 3.12或以上版本

    yum install cmake3 -y

    ln -s /usr/bin/cmake3 /usr/bin/cmake

获取源码

获取“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

编译和安装

  1. 解压软件包。

    tar -zxvf PhysX-3.4.2-bsd.tar.gzc

  2. 重命名并且移动。

    rm -rf /usr/local/physx

    mv PhysX-3.4.2-bsd /usr/local/physx

  3. 进入PhysX编译目录。

    cd /usr/local/physx/PhysX_3.4/Source/compiler/linux64

  4. 编译PhysX。

    make -j4

    编译过程中会报错,请参考故障排除解决报错问题

  5. 将生成的动态库的路径添加到“ld.so.conf”配置。

    1. 修改“/etc/ld.so.conf”文件。

      vim /etc/ld.so.conf

      在文件末尾添加如下内容:
      /usr/local/physx/PxShared/bin/linux64/
      /usr/local/physx/PhysX_3.4/Bin/linux64/
    2. 使配置修改生效。

      ldconfig -f /etc/ld.so.conf

    3. 检查配置是否生效。

      ldconfig -p

运行和验证

  1. 执行如下命令,检查生成的动态库和静态库。

    1. 检查生成的静态库。

      cd /usr/local/physx/PhysX_3.4

      find -name "*.a"

      当系统回显类似如图1所示时,表示生成的静态库成功。

      图1 检查生成的静态库
    2. 检查生成的动态库。

      cd /usr/local/physx/PhysX_3.4

      find -name "*.so"

      当系统回显类似如图2所示时,表示生成的动态库成功。

      图2 检查生成的动态库

  2. 选择“SnippetHelloWorld.cpp”进行测试。

    1. 进入“SnippetHelloWorld”目录。

      cd /usr/local/physx/PhysX_3.4/Snippets/SnippetHelloWorld/

    2. 编辑“SnippetHelloWorld.cpp”,修改代码中的“snippetMain”“main”
    3. 编写makefile文件。

      vim makefile

      内容如下:

      需要强调的是,“g++ SnippetHelloWorld.cpp $(DEBUG_FLAG)””前面空格由Tab键生成。

      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)
    4. 编译“SnippetHelloWorld.cpp”生成“a.out”

      make all

    5. 执行SnippetHelloWorld。

      ./a.out

      当系统回显类似如下信息时,表示安装PhysX成功,可以正常使用。
      [root@ecs SnippetHelloWorld]# ./a.out
      SnippetHelloWorld done.

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问