PhysX linker errors - custom VehicleMovementComponent

Hey UE Community!

For various reasons, I would like to implement my own VehicleMovementComponent and got stuck with some PhysX linker errors. Maybe anyone of you know what I am doing wrong here because everything else seems to work fine!
I’ve already included the PhysX and APEX dependencies in my build.cs file. And I’ve also included PhysXPublic.h in my cpp file. (I simply copied the code of UWheeledVehicleMovementComponent4W and tried to get it working in my project)

This is what i get:

    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl physx::PxVehicleWheelsSimData::free(void)" (?free@PxVehicleWheelsSimData@physx@@QEAAXXZ) referenced in function "public: static bool __cdecl FPhysXSupport<1>::ExecuteOnPxRigidDynamicReadWrite<class <lambda_794d03601fdedd205d4f164b7ee42778> >(struct FBodyInstance const *,class <lambda_794d03601fdedd205d4f164b7ee42778> const &)" (??$ExecuteOnPxRigidDynamicReadWrite@V<lambda_794d03601fdedd205d4f164b7ee42778>@@@?$FPhysXSupport@$00@@SA_NPEBUFBodyInstance@@AEBV<lambda_794d03601fdedd205d4f164b7ee42778>@@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: class physx::PxVec3 const & __cdecl physx::PxVehicleWheelsSimData::getWheelCentreOffset(unsigned int)const " (?getWheelCentreOffset@PxVehicleWheelsSimData@physx@@QEBAAEBVPxVec3@2@I@Z) referenced in function "void __cdecl SetupDriveHelper(class UTestVehicleMovementComponent4W const *,class physx::PxVehicleWheelsSimData const *,class physx::PxVehicleDriveSimData4W &)" (?SetupDriveHelper@@YAXPEBVUTestVehicleMovementComponent4W@@PEBVPxVehicleWheelsSimData@physx@@AEAVPxVehicleDriveSimData4W@3@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl physx::PxVehicleDriveSimData::setEngineData(class physx::PxVehicleEngineData const &)" (?setEngineData@PxVehicleDriveSimData@physx@@QEAAXAEBVPxVehicleEngineData@2@@Z) referenced in function "void __cdecl SetupDriveHelper(class UTestVehicleMovementComponent4W const *,class physx::PxVehicleWheelsSimData const *,class physx::PxVehicleDriveSimData4W &)" (?SetupDriveHelper@@YAXPEBVUTestVehicleMovementComponent4W@@PEBVPxVehicleWheelsSimData@physx@@AEAVPxVehicleDriveSimData4W@3@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl physx::PxVehicleDriveSimData::setGearsData(class physx::PxVehicleGearsData const &)" (?setGearsData@PxVehicleDriveSimData@physx@@QEAAXAEBVPxVehicleGearsData@2@@Z) referenced in function "void __cdecl SetupDriveHelper(class UTestVehicleMovementComponent4W const *,class physx::PxVehicleWheelsSimData const *,class physx::PxVehicleDriveSimData4W &)" (?SetupDriveHelper@@YAXPEBVUTestVehicleMovementComponent4W@@PEBVPxVehicleWheelsSimData@physx@@AEAVPxVehicleDriveSimData4W@3@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl physx::PxVehicleDriveSimData::setClutchData(class physx::PxVehicleClutchData const &)" (?setClutchData@PxVehicleDriveSimData@physx@@QEAAXAEBVPxVehicleClutchData@2@@Z) referenced in function "void __cdecl SetupDriveHelper(class UTestVehicleMovementComponent4W const *,class physx::PxVehicleWheelsSimData const *,class physx::PxVehicleDriveSimData4W &)" (?SetupDriveHelper@@YAXPEBVUTestVehicleMovementComponent4W@@PEBVPxVehicleWheelsSimData@physx@@AEAVPxVehicleDriveSimData4W@3@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl physx::PxVehicleDriveSimData::setAutoBoxData(class physx::PxVehicleAutoBoxData const &)" (?setAutoBoxData@PxVehicleDriveSimData@physx@@QEAAXAEBVPxVehicleAutoBoxData@2@@Z) referenced in function "void __cdecl SetupDriveHelper(class UTestVehicleMovementComponent4W const *,class physx::PxVehicleWheelsSimData const *,class physx::PxVehicleDriveSimData4W &)" (?SetupDriveHelper@@YAXPEBVUTestVehicleMovementComponent4W@@PEBVPxVehicleWheelsSimData@physx@@AEAVPxVehicleDriveSimData4W@3@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl physx::PxVehicleDriveSimData4W::setDiffData(class physx::PxVehicleDifferential4WData const &)" (?setDiffData@PxVehicleDriveSimData4W@physx@@QEAAXAEBVPxVehicleDifferential4WData@2@@Z) referenced in function "void __cdecl SetupDriveHelper(class UTestVehicleMovementComponent4W const *,class physx::PxVehicleWheelsSimData const *,class physx::PxVehicleDriveSimData4W &)" (?SetupDriveHelper@@YAXPEBVUTestVehicleMovementComponent4W@@PEBVPxVehicleWheelsSimData@physx@@AEAVPxVehicleDriveSimData4W@3@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl physx::PxVehicleDriveSimData4W::setAckermannGeometryData(class physx::PxVehicleAckermannGeometryData const &)" (?setAckermannGeometryData@PxVehicleDriveSimData4W@physx@@QEAAXAEBVPxVehicleAckermannGeometryData@2@@Z) referenced in function "void __cdecl SetupDriveHelper(class UTestVehicleMovementComponent4W const *,class physx::PxVehicleWheelsSimData const *,class physx::PxVehicleDriveSimData4W &)" (?SetupDriveHelper@@YAXPEBVUTestVehicleMovementComponent4W@@PEBVPxVehicleWheelsSimData@physx@@AEAVPxVehicleDriveSimData4W@3@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: static class physx::PxVehicleDrive4W * __cdecl physx::PxVehicleDrive4W::allocate(unsigned int)" (?allocate@PxVehicleDrive4W@physx@@SAPEAV12@I@Z) referenced in function "protected: virtual void __cdecl UTestVehicleMovementComponent4W::SetupVehicleDrive(class physx::PxVehicleWheelsSimData *)" (?SetupVehicleDrive@UTestVehicleMovementComponent4W@@MEAAXPEAVPxVehicleWheelsSimData@physx@@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl physx::PxVehicleDrive4W::setup(class physx::PxPhysics *,class physx::PxRigidDynamic *,class physx::PxVehicleWheelsSimData const &,class physx::PxVehicleDriveSimData4W const &,unsigned int)" (?setup@PxVehicleDrive4W@physx@@QEAAXPEAVPxPhysics@2@PEAVPxRigidDynamic@2@AEBVPxVehicleWheelsSimData@2@AEBVPxVehicleDriveSimData4W@2@I@Z) referenced in function "public: static bool __cdecl FPhysXSupport<1>::ExecuteOnPxRigidDynamicReadWrite<class <lambda_794d03601fdedd205d4f164b7ee42778> >(struct FBodyInstance const *,class <lambda_794d03601fdedd205d4f164b7ee42778> const &)" (??$ExecuteOnPxRigidDynamicReadWrite@V<lambda_794d03601fdedd205d4f164b7ee42778>@@@?$FPhysXSupport@$00@@SA_NPEBUFBodyInstance@@AEBV<lambda_794d03601fdedd205d4f164b7ee42778>@@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl physx::PxVehicleDrive4W::setToRestState(void)" (?setToRestState@PxVehicleDrive4W@physx@@QEAAXXZ) referenced in function "public: static bool __cdecl FPhysXSupport<1>::ExecuteOnPxRigidDynamicReadWrite<class <lambda_794d03601fdedd205d4f164b7ee42778> >(struct FBodyInstance const *,class <lambda_794d03601fdedd205d4f164b7ee42778> const &)" (??$ExecuteOnPxRigidDynamicReadWrite@V<lambda_794d03601fdedd205d4f164b7ee42778>@@@?$FPhysXSupport@$00@@SA_NPEBUFBodyInstance@@AEBV<lambda_794d03601fdedd205d4f164b7ee42778>@@@Z)
    1>TestVehicleMovementComponent4W.cpp.obj : error LNK2019: unresolved external symbol "void __cdecl physx::PxVehicleDrive4WSmoothAnalogRawInputsAndSetAnalogInputs(struct physx::PxVehiclePadSmoothingData const &,class physx::PxFixedSizeLookupTable<8> const &,class physx::PxVehicleDrive4WRawInputData const &,float,bool,class physx::PxVehicleDrive4W &)" (?PxVehicleDrive4WSmoothAnalogRawInputsAndSetAnalogInputs@physx@@YAXAEBUPxVehiclePadSmoothingData@1@AEBV?$PxFixedSizeLookupTable@$07@1@AEBVPxVehicleDrive4WRawInputData@1@M_NAEAVPxVehicleDrive4W@1@@Z) referenced in function "public: void __cdecl <lambda_8c921100a44aefe34048cd946214f2b2>::operator()(void)const " (??R<lambda_8c921100a44aefe34048cd946214f2b2>@@QEBAXXZ)

add this in your ProjectName.Build.cs

   PublicDependencyModuleNames.AddRange(new string[] { "PhysX", "PhysXVehicles", "PhysXVehicleLib" });

    PrivateDependencyModuleNames.AddRange(new string[] { "PhysX", "PhysXVehicles", "PhysXVehicleLib" });

genius! this works great! do i need the private dependencies?

thank you very much! :slight_smile: