0

我开始通过试验程序附带的基本 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 的几乎所有指令都适用于使用 Visual Studio IDE 的 Windows。

我应该在哪里定义NDEBUG_DEBUG何时我的目标只是复制SnippetHelloWorld_64

换句话说,我如何在 PhysX 中试验 HelloWorld(通过 Linux 命令行)?

4

1 回答 1

3

这些是我在 Ubuntu 18.04 上构建 PhysX SDK 的步骤:

  • 安装依赖项:sudo apt-get install clangsudo apt-get install cmakesudo apt-get install freeglut3-devsudo apt-get install libglew-devsudo apt-get install xtermsudo 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和其他演示:

片段HelloWorld_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 它只会重新编译您修改过的文件并重建最终的可执行文件,这对于快速开发非常有用,在具有结构良好的项目结构的同时进行实验和原型设计。编译器吐出这些错误的原因是因为这些定义基本上是编译器为配置 make 系统而自动生成的(grep调试符号并查看它们是在生成文件中定义的)。

简而言之,使用 make 系统,它的用途是什么。除非,你有一些与我在答案中假设的完全不同的原因,请指定它,我会尽力提供帮助,但是 afaik make 系统是你的朋友,构建整个 api 一次会很慢但是再次制作,它只会构建修改过的文件。

于 2020-07-25T03:18:02.577 回答