Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Physx-与come函数的链接问题(uu imp_PxCreateBasePhysics在函数中引用…)_C++_C++17_Nvidia_Game Development_Physx - Fatal编程技术网

C++ Physx-与come函数的链接问题(uu imp_PxCreateBasePhysics在函数中引用…)

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

我试图在我的游戏引擎中实现PhysX,但是我在链接PhysX库时遇到了一些奇怪的问题。无论我做什么,它总是失败,但Nvidia的片段就像一个符咒。我会试着描述我做了什么,我希望有人会发现我遗漏了什么

首先,我从下载了physx4.1。然后我将buildtools设置更改为:

<?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