C++ Physx-与come函数的链接问题(uu imp_PxCreateBasePhysics在函数中引用…)
我试图在我的游戏引擎中实现PhysX,但是我在链接PhysX库时遇到了一些奇怪的问题。无论我做什么,它总是失败,但Nvidia的片段就像一个符咒。我会试着描述我做了什么,我希望有人会发现我遗漏了什么 首先,我从下载了physx4.1。然后我将buildtools设置更改为:C++ Physx-与come函数的链接问题(uu imp_PxCreateBasePhysics在函数中引用…),c++,c++17,nvidia,game-development,physx,C++,C++17,Nvidia,Game Development,Physx,我试图在我的游戏引擎中实现PhysX,但是我在链接PhysX库时遇到了一些奇怪的问题。无论我做什么,它总是失败,但Nvidia的片段就像一个符咒。我会试着描述我做了什么,我希望有人会发现我遗漏了什么 首先,我从下载了physx4.1。然后我将buildtools设置更改为: <?xml version="1.0" encoding="utf-8"?> <preset name="vc15win64" comment="VC15 Win64 PhysX general setti
<?xml version="1.0" encoding="utf-8"?>
<preset name="vc15win64" comment="VC15 Win64 PhysX general settings">
<platform targetPlatform="win64" compiler="vc15" />
<CMakeSwitches>
<cmakeSwitch name="PX_BUILDSNIPPETS" value="True" comment="Generate the snippets" />
<cmakeSwitch name="PX_BUILDPUBLICSAMPLES" value="True" comment="Generate the samples projects" />
<cmakeSwitch name="PX_GENERATE_STATIC_LIBRARIES" value="True" comment="Generate static libraries" />
<cmakeSwitch name="NV_USE_STATIC_WINCRT" value="False" comment="Use the statically linked windows CRT" />
<cmakeSwitch name="NV_USE_DEBUG_WINCRT" value="True" comment="Use the debug version of the CRT" />
<cmakeSwitch name="PX_FLOAT_POINT_PRECISE_MATH" value="True" comment="Float point precise math" />
</CMakeSwitches>
<CMakeParams>
<cmakeParam name="CMAKE_INSTALL_PREFIX" value="install/vc15win64/PhysX" comment="Install path relative to PhysX SDK root" />
</CMakeParams>
</preset>
我认为这些都是必需的头文件。然后,我添加了链接的lib文件列表(在我看来,甚至有些文件是不必要的):
然后我创建了一个非常简单的C++代码,测试它是否工作:
#include "PxPhysicsAPI.h"
int main()
{
auto Allocator = physx::PxDefaultAllocator();
auto ErrorCallback = physx::PxDefaultErrorCallback();
auto Foundation = PxCreateFoundation(PX_PHYSICS_VERSION, Allocator, ErrorCallback);
auto PhysXVisualDebugger = PxCreatePvd(*Foundation);
const auto transport = physx::PxDefaultPvdSocketTransportCreate("127.0.0.1", 5425, 10);
PhysXVisualDebugger->connect(*transport, physx::PxPvdInstrumentationFlag::eALL);
auto Physics = PxCreatePhysics(PX_PHYSICS_VERSION, *Foundation, physx::PxTolerancesScale(), true, PhysXVisualDebugger);
physx::PxSceneDesc sceneDesc(Physics->getTolerancesScale());
sceneDesc.gravity = physx::PxVec3(0.0f, -9.81f, 0.0f);
auto Dispatcher = physx::PxDefaultCpuDispatcherCreate(2);
sceneDesc.cpuDispatcher = Dispatcher;
sceneDesc.filterShader = physx::PxDefaultSimulationFilterShader;
auto Scene = Physics->createScene(sceneDesc);
auto pvdClient = Scene->getScenePvdClient();;
pvdClient->setScenePvdFlag(physx::PxPvdSceneFlag::eTRANSMIT_CONSTRAINTS, true);
pvdClient->setScenePvdFlag(physx::PxPvdSceneFlag::eTRANSMIT_CONTACTS, true);
pvdClient->setScenePvdFlag(physx::PxPvdSceneFlag::eTRANSMIT_SCENEQUERIES, true);
}
而且。。。它就是不起作用。当我试图编译我的简单项目时,我总是从链接器中得到以下错误:
听起来可能很有趣,但我几乎什么都试过了。我知道是哪一行导致了这个错误,因为如果我删除调用PxCreatePhysics
它编译时没有任何问题。只有这一行有一些奇怪的链接问题,我不明白
我应该如何解决这个问题?我甚至不知道在哪里可以找到答案。我已经为正确的CPU体系结构和正确的运行库编译了PhysX库,使用相同的sompiler和相同的机器,为什么Nvidia的示例有效而我的代码无效?我找到了问题的答案。您需要添加此预处理器定义:
PX_PHYSX_STATIC_LIB
或者,您可以在其他导入之前包含
PxConfig.h
头文件,但我不推荐这种方法,因为IDE会一直通知您,此导入是不必要的(根本不正确)。我找到了问题的答案。您需要添加此预处理器定义:
PX_PHYSX_STATIC_LIB
或者,您可以在其他导入之前包含
PxConfig.h
头文件,但我不建议使用这种方法,因为IDE会一直通知您,此导入是不必要的(根本不是真的)。您是否已将.lib文件添加到发行版和调试版中?有时我把它添加到一个(我不使用的)我检查了两次。看起来我做得不错。您是否已将.lib文件添加到发行版和调试版本中?有时我把它添加到一个(我不使用的)我检查了两次。看来我做对了。
PX_PHYSX_STATIC_LIB