我开始测试PhysX,在程序提供的基本Hello片段上进行实验。
我的安装是在Ubuntu20.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使用Visual的。
当我的目标仅仅是复制NDEBUG或_DEBUG时,我应该在哪里定义SnippetHelloWorld_64
换句话说,我如何在HelloWorld (通过Linux命令行)中试验PhysX?
发布于 2020-07-25 03:18:02
以下是我在Ubuntu18.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和按照README.md中的说明运行generate_projects.sh并选择生成cmake设置的linux选项。
进入PhysX-4.1/physx/compiler/linux-debug并运行make,这在我的笔记本上花费了大约10分钟的时间,并编译了包含大量.o的SDK。
最后,将cd转换为PhysX-4.1/physx/bin/linux.clang/debug,您应该能够运行./SnippetHelloWorld_64和其他演示:

编辑:
SnippetHelloWorld.cpp依赖于大量其他文件,如SnippetHelloWorldRender.cpp、相机之类的东西、碰撞检测代码,以及运行该特定示例所必需的任何其他文件都位于其他文件中。make系统自动地将必要的依赖项校准成一个大命令,即。g++ -I./include SnippetHelloWorld.cpp physx.o octree.a anotherdependency.x ... -o SnippetHelloWorld_64等..。为了节省您要做的工作,这就是手动解决所有依赖关系,除非您试图从monolith API结构中提取带有依赖关系的基本示例,否则我不会重复这些依赖关系,在这种情况下,我仍然将使用现有的make系统,并且缓慢但肯定地删除API的部分内容,直到您有了一个仍然在构建的最小示例(随时会发生故障)。不管怎样,回到make系统。它不只是构建一个库一次,它对持续开发很有用,因为您可以第一次开发,因为它构建了所有的东西,但是如果您修改了一些文件并再次运行make,那么它只会重新编译您修改过的文件并重新构建最终的可执行文件,这对于快速开发、实验和原型化以及结构良好的项目结构都有很好的帮助。编译器抛出这些错误的原因是,这些定义基本上是为配置makefile而自动生成的(grep,调试符号,并看到它们是在makefile中定义的)。
简而言之,使用make系统,这就是它的目的。除非,您有一些与我在答案中所假设的有很大不同的原因,请指定它,我将尽力帮助它,但是afaik的make系统是您在这方面的朋友,构建整个api一次会很慢,但是再次生成,并且它只会构建修改过的文件。
https://stackoverflow.com/questions/62894488
复制相似问题