如何在 Nvidia PhysX 中编译独立片段?
How do you compile standalone snippets in Nvidia PhysX?
我开始通过在程序附带的基本 Hello World 片段上进行试验来测试 PhysX。
我的安装是在 Ubuntu 20.04.
据我了解
的源代码
/home/ubuntu1/PhysX/physx/bin/linux.clang/release/SnippetHelloWorld_64
位于
/home/ubuntu1/PhysX/physx/snippets/snippethelloworld
我尝试通过
编译它
clang++ -I/home/ubuntu1/PhysX/physx/install/linux/PhysX/include \
-I/home/ubuntu1/PhysX/physx/install/linux/PxShared/include \
SnippetHelloWorld.cpp
但是我得到一个错误
In file included from SnippetHelloWorld.cpp:39:
In file included from /home/ubuntu1/PhysX/physx/install/linux/PhysX/include/PxPhysicsAPI.h:45:
In file included from /home/ubuntu1/PhysX/physx/install/linux/PxShared/include/foundation/Px.h:37:
In file included from /home/ubuntu1/PhysX/physx/install/linux/PxShared/include/foundation/PxSimpleTypes.h:40:
/home/ubuntu1/PhysX/physx/install/linux/PxShared/include/foundation/PxPreprocessor.h:444:2: error: Exactly one of NDEBUG and _DEBUG needs to be defined!
#error Exactly one of NDEBUG and _DEBUG needs to be defined!
^
1 error generated.
显然,我应该在一个环境中编码。几乎所有的 PhysX 指令都是针对 Windows using Visual Studio IDE.
当我的目标只是复制 SnippetHelloWorld_64
时,我应该在哪里定义 NDEBUG
或 _DEBUG
?
换句话说,我如何在 PhysX 中试验 HelloWorld(通过 Linux 命令行)?
这些是我在 Ubuntu 18.04 上构建 PhysX SDK 时使用的步骤:
- 安装依赖项:
sudo apt-get install clang
、sudo apt-get install cmake
、sudo apt-get install freeglut3-dev
、sudo apt-get install libglew-dev
、sudo apt-get install xterm
和 sudo apt-get install nvidia-cg-toolkit
按照 README.md
和 运行 generate_projects.sh
中的说明并选择 linux
的选项,生成 cmake 设置。
进入 PhysX-4.1/physx/compiler/linux-debug
和 运行 make
,这在我的笔记本电脑上花费了大约 10 分钟并编译了包含大量 .o
.
最后 cd
进入 PhysX-4.1/physx/bin/linux.clang/debug
你应该可以 运行 ./SnippetHelloWorld_64
和其他演示:
编辑:
SnippetHelloWorld.cpp
依赖于一大堆其他文件,例如 SnippetHelloWorldRender.cpp
、相机、碰撞检测代码以及来自 physx API 的任何其他文件 运行那个特定的例子都位于其他文件中。 make 系统自动将必要的依赖项校准为一个大命令,即。 g++ -I./include SnippetHelloWorld.cpp physx.o octree.a anotherdependency.x ... -o SnippetHelloWorld_64
等...为您节省您尝试做的事情,即手动解决所有依赖关系,除非您试图从整体中提取具有依赖关系的裸骨示例,否则我不推荐这样做 API 结构,在这种情况下,我仍然会使用手头的 make 系统并缓慢但肯定地删除 API 的部分,直到你有一个仍在构建的最小示例(在它沿途中断的任何时候反转) .无论如何,回到 make 系统。它不仅仅是一次构建一个库,它对于持续开发很有用,因为你可以第一次构建,需要很长时间,因为它构建了所有东西,但是如果你修改了一些文件并 运行 再次构建它只会重新编译您修改过的文件并重建最终的可执行文件,这对于 rapid 开发、试验和原型制作非常有用,同时具有结构良好的项目结构。编译器吐出这些错误的原因是因为这些定义基本上是编译器为配置 make 系统而自动生成的(grep
调试符号并看到它们在 makefile 中定义)。
简而言之,使用 make 系统,它有什么用。除非,你有一些与我在答案中假设的明显不同的原因,请具体说明,我会尽力帮忙,但 afaik make 系统是你的朋友,构建整个 api 一次会很慢,但会再做一次,它只会构建修改过的文件。
我开始通过在程序附带的基本 Hello World 片段上进行试验来测试 PhysX。
我的安装是在 Ubuntu 20.04.
据我了解
的源代码/home/ubuntu1/PhysX/physx/bin/linux.clang/release/SnippetHelloWorld_64
位于
/home/ubuntu1/PhysX/physx/snippets/snippethelloworld
我尝试通过
编译它clang++ -I/home/ubuntu1/PhysX/physx/install/linux/PhysX/include \
-I/home/ubuntu1/PhysX/physx/install/linux/PxShared/include \
SnippetHelloWorld.cpp
但是我得到一个错误
In file included from SnippetHelloWorld.cpp:39:
In file included from /home/ubuntu1/PhysX/physx/install/linux/PhysX/include/PxPhysicsAPI.h:45:
In file included from /home/ubuntu1/PhysX/physx/install/linux/PxShared/include/foundation/Px.h:37:
In file included from /home/ubuntu1/PhysX/physx/install/linux/PxShared/include/foundation/PxSimpleTypes.h:40:
/home/ubuntu1/PhysX/physx/install/linux/PxShared/include/foundation/PxPreprocessor.h:444:2: error: Exactly one of NDEBUG and _DEBUG needs to be defined!
#error Exactly one of NDEBUG and _DEBUG needs to be defined!
^
1 error generated.
显然,我应该在一个环境中编码。几乎所有的 PhysX 指令都是针对 Windows using Visual Studio IDE.
当我的目标只是复制 SnippetHelloWorld_64
时,我应该在哪里定义 NDEBUG
或 _DEBUG
?
换句话说,我如何在 PhysX 中试验 HelloWorld(通过 Linux 命令行)?
这些是我在 Ubuntu 18.04 上构建 PhysX SDK 时使用的步骤:
- 安装依赖项:
sudo apt-get install clang
、sudo apt-get install cmake
、sudo apt-get install freeglut3-dev
、sudo apt-get install libglew-dev
、sudo apt-get install xterm
和sudo apt-get install nvidia-cg-toolkit
按照 README.md
和 运行 generate_projects.sh
中的说明并选择 linux
的选项,生成 cmake 设置。
进入 PhysX-4.1/physx/compiler/linux-debug
和 运行 make
,这在我的笔记本电脑上花费了大约 10 分钟并编译了包含大量 .o
.
最后 cd
进入 PhysX-4.1/physx/bin/linux.clang/debug
你应该可以 运行 ./SnippetHelloWorld_64
和其他演示:
编辑:
SnippetHelloWorld.cpp
依赖于一大堆其他文件,例如 SnippetHelloWorldRender.cpp
、相机、碰撞检测代码以及来自 physx API 的任何其他文件 运行那个特定的例子都位于其他文件中。 make 系统自动将必要的依赖项校准为一个大命令,即。 g++ -I./include SnippetHelloWorld.cpp physx.o octree.a anotherdependency.x ... -o SnippetHelloWorld_64
等...为您节省您尝试做的事情,即手动解决所有依赖关系,除非您试图从整体中提取具有依赖关系的裸骨示例,否则我不推荐这样做 API 结构,在这种情况下,我仍然会使用手头的 make 系统并缓慢但肯定地删除 API 的部分,直到你有一个仍在构建的最小示例(在它沿途中断的任何时候反转) .无论如何,回到 make 系统。它不仅仅是一次构建一个库,它对于持续开发很有用,因为你可以第一次构建,需要很长时间,因为它构建了所有东西,但是如果你修改了一些文件并 运行 再次构建它只会重新编译您修改过的文件并重建最终的可执行文件,这对于 rapid 开发、试验和原型制作非常有用,同时具有结构良好的项目结构。编译器吐出这些错误的原因是因为这些定义基本上是编译器为配置 make 系统而自动生成的(grep
调试符号并看到它们在 makefile 中定义)。
简而言之,使用 make 系统,它有什么用。除非,你有一些与我在答案中假设的明显不同的原因,请具体说明,我会尽力帮忙,但 afaik make 系统是你的朋友,构建整个 api 一次会很慢,但会再做一次,它只会构建修改过的文件。