Bruno
28-09-2011 16:54:35
Hi, I've been having some trouble compiling OgreODE (I'm using Ubuntu 11.04). I downloaded and successfully compiled Ogre 1.7.3 and ODE 0.11.1, however whenever I try to compile OgreODE (the latest version from the ogreaddons svn), I get an error saying that I must recompile with -fPIC when it was linking to libODE.a. Anyway, I added -fPIC to $CXXFLAGS, ran ./configure && make clean && make in the directory I had previously compiled ODE in but alas, it made no difference whatsoever. I then tried various combinations of compiling different parts with -fPIC, trying to do it in different ways, etc for a couple of hours until I finally gave up.
Here's the output I got from make:
Edit: I noticed that if I configure ODE with --with-pic I'm able to get further and it does compile libOgreOde_Core.so and libOgreOde_Prefab.so, however is still stops once it gets to libOgreOde_Prefab.so.1.3.0. Here's the output:
Any ideas what I might be doing wrong? I've been struggling with this for ages and if anyone else could at least share how they got it to work that would be greatly appreciated
Here's the output I got from make:
$ make -j3
[ 3%] [ 6%] Building CXX object tinyxml/CMakeFiles/tinyxml.dir/tinyxml.cpp.o
Building CXX object tinyxml/CMakeFiles/tinyxml.dir/tinystr.cpp.o
Scanning dependencies of target OgreOde_Core
[ 10%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeBody.cpp.o
[ 13%] Building CXX object tinyxml/CMakeFiles/tinyxml.dir/tinyxmlerror.cpp.o
[ 17%] Building CXX object tinyxml/CMakeFiles/tinyxml.dir/tinyxmlparser.cpp.o
[ 20%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeCollision.cpp.o
Linking CXX static library libtinyxml.a
[ 20%] Built target tinyxml
[ 24%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeDebugContact.cpp.o
[ 27%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeDebugObject.cpp.o
[ 31%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeEigenSolver.cpp.o
[ 34%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeEntityInformer.cpp.o
[ 37%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeGeometry.cpp.o
[ 41%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeJoint.cpp.o
/home/rory/Programming/ogreode/Core/src/OgreOdeJoint.cpp: In member function ‘virtual void OgreOde::PistonJoint::setAxisDelta(const Ogre::Vector3&, const Ogre::Vector3&)’:
/home/rory/Programming/ogreode/Core/src/OgreOdeJoint.cpp:863:2: warning: ‘void dJointSetPistonAxisDelta(dxJoint*, dReal, dReal, dReal, dReal, dReal, dReal)’ is deprecated (declared at /usr/include/ode/objects.h:2057)
/home/rory/Programming/ogreode/Core/src/OgreOdeJoint.cpp:864:74: warning: ‘void dJointSetPistonAxisDelta(dxJoint*, dReal, dReal, dReal, dReal, dReal, dReal)’ is deprecated (declared at /usr/include/ode/objects.h:2057)
[ 44%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeMaintainedList.cpp.o
[ 48%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeMass.cpp.o
[ 51%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdePrecompiledHeaders.cpp.o
[ 55%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeSpace.cpp.o
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp: In constructor ‘OgreOde::CapsuleMass::CapsuleMass(Ogre::Real, Ogre::Real, const Ogre::Vector3&, Ogre::Real)’:
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp:124:2: warning: ‘void dMassSetCappedCylinderTotal(dMass*, dReal, int, dReal, dReal)’ is deprecated (declared at /usr/include/ode/mass.h:85)
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp:124:80: warning: ‘void dMassSetCappedCylinderTotal(dMass*, dReal, int, dReal, dReal)’ is deprecated (declared at /usr/include/ode/mass.h:85)
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp: In member function ‘void OgreOde::CapsuleMass::setDensity(Ogre::Real, Ogre::Real, const Ogre::Vector3&, Ogre::Real)’:
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp:135:2: warning: ‘void dMassSetCappedCylinder(dMass*, dReal, int, dReal, dReal)’ is deprecated (declared at /usr/include/ode/mass.h:84)
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp:135:78: warning: ‘void dMassSetCappedCylinder(dMass*, dReal, int, dReal, dReal)’ is deprecated (declared at /usr/include/ode/mass.h:84)
[ 58%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeStepper.cpp.o
[ 62%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeTriangleMeshData.cpp.o
[ 65%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeTriangleMeshDataManager.cpp.o
[ 68%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeUtility.cpp.o
[ 72%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeWorld.cpp.o
Linking CXX shared library ../lib/libOgreOde_Core.so
/usr/bin/ld: ../../ode/ode/src/.libs/libode.a(box.o): relocation R_X86_64_32S against `vtable for dxBox' can not be used when making a shared object; recompile with -fPIC
../../ode/ode/src/.libs/libode.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [lib/libOgreOde_Core.so.1.3.0] Error 1
make[1]: *** [Core/CMakeFiles/OgreOde_Core.dir/all] Error 2
make: *** [all] Error 2
Edit: I noticed that if I configure ODE with --with-pic I'm able to get further and it does compile libOgreOde_Core.so and libOgreOde_Prefab.so, however is still stops once it gets to libOgreOde_Prefab.so.1.3.0. Here's the output:
[ 3%] Building CXX object tinyxml/CMakeFiles/tinyxml.dir/tinystr.cpp.o
[ 6%]
Building CXX object tinyxml/CMakeFiles/tinyxml.dir/tinyxml.cpp.o
[ 10%] Building CXX object tinyxml/CMakeFiles/tinyxml.dir/tinyxmlerror.cpp.o
[ 13%] Building CXX object tinyxml/CMakeFiles/tinyxml.dir/tinyxmlparser.cpp.o
Linking CXX static library libtinyxml.a
/usr/bin/ar cr libtinyxml.a CMakeFiles/tinyxml.dir/tinystr.cpp.o CMakeFiles/tinyxml.dir/tinyxml.cpp.o CMakeFiles/tinyxml.dir/tinyxmlerror.cpp.o CMakeFiles/tinyxml.dir/tinyxmlparser.cpp.o
/usr/bin/ranlib libtinyxml.a
[ 13%] Built target tinyxml
[ 17%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeBody.cpp.o
[ 20%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeCollision.cpp.o
[ 24%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeDebugContact.cpp.o
[ 27%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeDebugObject.cpp.o
[ 31%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeEigenSolver.cpp.o
[ 34%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeEntityInformer.cpp.o
[ 37%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeGeometry.cpp.o
[ 41%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeJoint.cpp.o
/home/rory/Programming/ogreode/Core/src/OgreOdeJoint.cpp: In member function ‘virtual void OgreOde::PistonJoint::setAxisDelta(const Ogre::Vector3&, const Ogre::Vector3&)’:
/home/rory/Programming/ogreode/Core/src/OgreOdeJoint.cpp:863:2: warning: ‘void dJointSetPistonAxisDelta(dxJoint*, dReal, dReal, dReal, dReal, dReal, dReal)’ is deprecated (declared at /usr/include/ode/objects.h:2057)
/home/rory/Programming/ogreode/Core/src/OgreOdeJoint.cpp:864:74: warning: ‘void dJointSetPistonAxisDelta(dxJoint*, dReal, dReal, dReal, dReal, dReal, dReal)’ is deprecated (declared at /usr/include/ode/objects.h:2057)
[ 44%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeMaintainedList.cpp.o
[ 48%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeMass.cpp.o
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp: In constructor ‘OgreOde::CapsuleMass::CapsuleMass(Ogre::Real, Ogre::Real, const Ogre::Vector3&, Ogre::Real)’:
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp:124:2: warning: ‘void dMassSetCappedCylinderTotal(dMass*, dReal, int, dReal, dReal)’ is deprecated (declared at /usr/include/ode/mass.h:85)
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp:124:80: warning: ‘void dMassSetCappedCylinderTotal(dMass*, dReal, int, dReal, dReal)’ is deprecated (declared at /usr/include/ode/mass.h:85)
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp: In member function ‘void OgreOde::CapsuleMass::setDensity(Ogre::Real, Ogre::Real, const Ogre::Vector3&, Ogre::Real)’:
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp:135:2: warning: ‘void dMassSetCappedCylinder(dMass*, dReal, int, dReal, dReal)’ is deprecated (declared at /usr/include/ode/mass.h:84)
/home/rory/Programming/ogreode/Core/src/OgreOdeMass.cpp:135:78: warning: ‘void dMassSetCappedCylinder(dMass*, dReal, int, dReal, dReal)’ is deprecated (declared at /usr/include/ode/mass.h:84)
[ 51%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdePrecompiledHeaders.cpp.o
[ 55%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeSpace.cpp.o
[ 58%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeStepper.cpp.o
[ 62%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeTriangleMeshData.cpp.o
[ 65%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeTriangleMeshDataManager.cpp.o
[ 68%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeUtility.cpp.o
[ 72%] Building CXX object Core/CMakeFiles/OgreOde_Core.dir/src/OgreOdeWorld.cpp.o
Linking CXX shared library ../lib/libOgreOde_Core.so
/usr/bin/c++ -fPIC -O3 -DNDEBUG -shared -Wl,-soname,libOgreOde_Core.so.1.3.0 -o ../lib/libOgreOde_Core.so.1.3.0 CMakeFiles/OgreOde_Core.dir/src/OgreOdeBody.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeCollision.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeDebugContact.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeDebugObject.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeEigenSolver.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeEntityInformer.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeGeometry.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeJoint.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeMaintainedList.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeMass.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdePrecompiledHeaders.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeSpace.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeStepper.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeTriangleMeshData.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeTriangleMeshDataManager.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeUtility.cpp.o CMakeFiles/OgreOde_Core.dir/src/OgreOdeWorld.cpp.o ../../ode/ode/src/.libs/libode.a -lOgreMain
[ 72%] Built target OgreOde_Core
[ 75%] Building CXX object prefab/CMakeFiles/OgreOde_Prefab.dir/src/OgreOdePrefabObject.cpp.o
[ 79%] Building CXX object prefab/CMakeFiles/OgreOde_Prefab.dir/src/OgreOdeRagdoll.cpp.o
[ 82%] Building CXX object prefab/CMakeFiles/OgreOde_Prefab.dir/src/OgreOdeVehicle.cpp.o
Linking CXX shared library ../lib/libOgreOde_Prefab.so
/usr/bin/c++ -fPIC -O3 -DNDEBUG -shared -Wl,-soname,libOgreOde_Prefab.so.1.3.0 -o ../lib/libOgreOde_Prefab.so.1.3.0 CMakeFiles/OgreOde_Prefab.dir/src/OgreOdePrefabObject.cpp.o CMakeFiles/OgreOde_Prefab.dir/src/OgreOdeRagdoll.cpp.o CMakeFiles/OgreOde_Prefab.dir/src/OgreOdeVehicle.cpp.o ../lib/libOgreOde_Core.so.1.3.0 -lOgreMain ../../ode/ode/src/.libs/libode.a -lOgreMain -Wl,-rpath,/home/rory/Programming/ogreode/build/lib:
[ 82%] Built target OgreOde_Prefab
[ 86%] Building CXX object loader/CMakeFiles/OgreOde_Loader.dir/src/OgreOdeDotLoader.cpp.o
/usr/bin/ld: ../tinyxml/libtinyxml.a(tinyxml.cpp.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
../tinyxml/libtinyxml.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [lib/libOgreOde_Loader.so.1.3.0] Error 1
make[1]: *** [loader/CMakeFiles/OgreOde_Loader.dir/all] Error 2
make: *** [all] Error 2
Linking CXX shared library ../lib/libOgreOde_Loader.so
/usr/bin/c++ -fPIC -O3 -DNDEBUG -shared -Wl,-soname,libOgreOde_Loader.so.1.3.0 -o ../lib/libOgreOde_Loader.so.1.3.0 CMakeFiles/OgreOde_Loader.dir/src/OgreOdeDotLoader.cpp.o ../lib/libOgreOde_Core.so.1.3.0 ../lib/libOgreOde_Prefab.so.1.3.0 -lOgreMain ../tinyxml/libtinyxml.a ../lib/libOgreOde_Core.so.1.3.0 ../../ode/ode/src/.libs/libode.a -lOgreMain -Wl,-rpath,/home/rory/Programming/ogreode/build/lib: Any ideas what I might be doing wrong? I've been struggling with this for ages and if anyone else could at least share how they got it to work that would be greatly appreciated