Try / OpenGothic

Reimplementation of Gothic 2 Notr
MIT License
1.14k stars 80 forks source link

Bullet Double precision: Undefined references #367

Closed phodina closed 1 year ago

phodina commented 1 year ago

Hi,

when building the OpenGothic I encounter issue when linking at the end of the build.

Could you please suggest what to do?

cd /tmp/guix-build-opengothic-0.63.drv-0/build/lib/Tempest/Engine/thirdparty/spirv_cross && /gnu/store/j65q3aw414010gdfvmsynwpzfb2jyyd3-cmake-minimal-3.21.4/bin/cmake -E cmake_link_script CMakeFiles/spirv-cross.dir/link.txt --verbose=1
/gnu/store/069aq2v993kpc41yabp5b6vm4wb9jkhg-gcc-10.3.0/bin/c++ -O2 -g -DNDEBUG -rdynamic CMakeFiles/spirv-cross.dir/main.cpp.o -o ../../../../../opengothic/spirv-cross  libspirv-cross-glsl.a libspirv-cross-hlsl.a libspirv-cross-cpp.a libspirv-cross-reflect.a libspirv-cross-msl.a libspirv-cross-util.a libspirv-cross-core.a libspirv-cross-glsl.a libspirv-cross-core.a
ld: CMakeFiles/Gothic2Notr.dir/game/physics/collisionworld.cpp.o: in function `btDiscreteDynamicsWorld::updateVehicles(float)':
/gnu/store/yjg1y2yzvvg277w484n4xwcdm6v1anvn-bullet-3.17/include/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h:188: undefined reference to `btDiscreteDynamicsWorld::updateActions(float)'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/collisionworld.cpp.o:(.data.rel.ro._ZTV14CollisionWorld[_ZTV14CollisionWorld]+0x80): undefined reference to `btDiscreteDynamicsWorld::stepSimulation(float, int, float)'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/collisionworld.cpp.o:(.data.rel.ro._ZTV14CollisionWorld[_ZTV14CollisionWorld]+0x130): undefined reference to `btDiscreteDynamicsWorld::predictUnconstraintMotion(float)'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/collisionworld.cpp.o:(.data.rel.ro._ZTV14CollisionWorld[_ZTV14CollisionWorld]+0x138): undefined reference to `btDiscreteDynamicsWorld::integrateTransforms(float)'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/collisionworld.cpp.o:(.data.rel.ro._ZTV14CollisionWorld[_ZTV14CollisionWorld]+0x148): undefined reference to `btDiscreteDynamicsWorld::updateActivationState(float)'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/collisionworld.cpp.o:(.data.rel.ro._ZTV14CollisionWorld[_ZTV14CollisionWorld]+0x150): undefined reference to `btDiscreteDynamicsWorld::internalSingleStepSimulation(float)'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/collisionworld.cpp.o:(.data.rel.ro._ZTV14CollisionWorld[_ZTV14CollisionWorld]+0x158): undefined reference to `btDiscreteDynamicsWorld::createPredictiveContacts(float)'
ld: make[2]: Leaving directory '/tmp/guix-build-opengothic-0.63.drv-0/build'
[100%] Built target spirv-cross
CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o: in function `DynamicWorld::HumShape::HumShape(float, float)':
/tmp/guix-build-opengothic-0.63.drv-0/source/game/physics/dynamicworld.cpp:21: undefined reference to `btCapsuleShape::btCapsuleShape(float, float)'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o: in function `DynamicWorld::NpcBody::NpcBody(btCollisionShape*)':
/tmp/guix-build-opengothic-0.63.drv-0/source/game/physics/dynamicworld.cpp:36: undefined reference to `btRigidBody::btRigidBody(float, btMotionState*, btCollisionShape*, btVector3 const&)'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o: in function `DynamicWorld::BBoxBody::BBoxBody(DynamicWorld*, DynamicWorld::BBoxCallback*, Tempest::BasicPoint<float, 3ul> const&, float)':
/tmp/guix-build-opengothic-0.63.drv-0/source/game/physics/dynamicworld.cpp:1105: undefined reference to `btCapsuleShape::btCapsuleShape(float, float)'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o:(.data.rel.ro._ZTV32btMultimaterialTriangleMeshShape[_ZTV32btMultimaterialTriangleMeshShape]+0x28): undefined reference to `btCollisionShape::getBoundingSphere(btVector3&, float&) const'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o:(.data.rel.ro._ZTV32btMultimaterialTriangleMeshShape[_ZTV32btMultimaterialTriangleMeshShape]+0x38): undefined reference to `btCollisionShape::getContactBreakingThreshold(float) const'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o:(.data.rel.ro._ZTV32btMultimaterialTriangleMeshShape[_ZTV32btMultimaterialTriangleMeshShape]+0x50): undefined reference to `btTriangleMeshShape::calculateLocalInertia(float, btVector3&) const'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o:(.data.rel.ro._ZTVN12DynamicWorld8HumShapeE[_ZTVN12DynamicWorld8HumShapeE]+0x28): undefined reference to `btCollisionShape::getBoundingSphere(btVector3&, float&) const'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o:(.data.rel.ro._ZTVN12DynamicWorld8HumShapeE[_ZTVN12DynamicWorld8HumShapeE]+0x38): undefined reference to `btCollisionShape::getContactBreakingThreshold(float) const'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o:(.data.rel.ro._ZTVN12DynamicWorld8HumShapeE[_ZTVN12DynamicWorld8HumShapeE]+0x50): undefined reference to `btCapsuleShape::calculateLocalInertia(float, btVector3&) const'
ld: CMakeFiles/Gothic2Notr.dir/game/physics/dynamicworld.cpp.o:(.data.rel.ro._ZTVN12DynamicWorld8HumShapeE[_ZTVN12DynamicWorld8HumShapeE]+0xa0): undefined reference to `btConvexShape::project(btTransform const&, btVector3 const&, float&, float&, btVector3&, btVector3&) const'
Try commented 1 year ago

Hi, @phodina !

Can't hard to say what is root cause, OpenGothic build in appveyor just fine. From the log, it looks like Bullet stuff can't be linked properly. Is there anything specific on you machine, related to Bullet?

phodina commented 1 year ago

Sorry for the late answer @Try.

The issue was caused by bullet3 as it had enabled -DUSE_DOUBLE_PRECISION=ON due to OpenMW.

Would there be any benefit to use double precision or do you plan to keep using floats?

Try commented 1 year ago

Hi, @phodina !

I haven't tested how -DUSE_DOUBLE_PRECISION=ON interacts with OpenGothic. Could cause performance regression, but I don't know for sure.