2012-08-02 1 views
-1

이 내 연결 명령 줄입니다 : 나는 약간의 반복이 알고GCC는 기존 심볼에 정의되지 않은 참조를보고

g++ -o verdox src/AIFactory.o src/AnimatedMesh.o src/BalanceStone.o src/Camera.o \ 
src/Card.o src/Caterpillar.o src/Character.o src/Collectable.o src/Concave.o \ 
src/Configuration.o src/Dynamic.o src/DynBall.o src/Enemy.o src/FixedLight.o \ 
src/FuzzyState.o src/Game.o src/GameInput.o src/GameUnit.o src/HUD.o src/Level.o \ 
src/LogicAttributes.o src/MainCharacter.o src/Main.o src/Menu.o src/MenuInput.o \ 
src/MeshStrider.o src/Object.o src/ObjectFactory.o src/OgreDebugDrawer.o \ 
src/OgreMusic.o src/OgreSoundEffect.o src/Projectile.o src/Scenery.o src/Shape.o \ 
src/SoftBody.o src/Trigger.o src/Utils.o src/Verdox.o src/Wasp.o src/World.o \ 
UFUG/libufug.a TinyXML/libtinyxml.a -L[...](lots of library dirs) \ 
-lboost_thread-mt -logg -lvorbis -lvorbisfile -lConvexDecomposition \ 
-lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath \ 
-lOgreMain -lpthread /usr/local/lib/OGRE/Plugin_OctreeZone.so \ 
/usr/local/lib/OGRE/Plugin_PCZSceneManager.so -Wl,-rpath,/usr/local/lib/OGRE \ 
-L/usr/local/lib -lOgreMain -lpthread -L/usr/local/lib -lCEGUIBase \ 
-L/usr/local/lib -lCEGUIOgreRenderer -lOgreMain -lpthread -lCEGUIBase -lsigc-2.0 \ 
-lopenal -lOIS 

,하지만 난 전혀 해를 끼치하지 않는다해야한다고 생각하고, 나는 싸우고 싶지 않아 무엇이 잘못되었는지 알기 전에 시스템을 구축하십시오.

src/Game.o: In function `Game': 
/home/lucas/src/ufugames/verdox/src/Game.cpp:64: undefined reference to `Ogre::PCZPlugin::PCZPlugin()' 
/home/lucas/src/ufugames/verdox/src/Game.cpp:64: undefined reference to `Ogre::OctreeZonePlugin::OctreeZonePlugin()' 
src/Game.o: In function `~PCZPlugin': 
/home/lucas/src/ufugames/ogre_src_v1-8-0/PlugIns/PCZSceneManager/include/OgrePCZPlugin.h:49: undefined reference to `vtable for Ogre::PCZPlugin' 
src/Game.o: In function `~OctreeZonePlugin': 
/home/lucas/src/ufugames/ogre_src_v1-8-0/PlugIns/OctreeZone/include/OgreOctreeZonePlugin.h:47: undefined reference to `vtable for Ogre::OctreeZonePlugin' 
collect2: ld returned 1 exit status 

그러나 Plugin_OctreeZone.soPlugin_PCZSceneManager.so 내부에서 발견 된 실종 신고를 모든 기호 :

$ nm -C /usr/local/lib/OGRE/Plugin_PCZSceneManager.so | grep "Ogre::PCZPlugin::PCZPlugin()" 
00029440 t Ogre::PCZPlugin::PCZPlugin() 
00029440 t Ogre::PCZPlugin::PCZPlugin() 

$ nm -C /usr/local/lib/OGRE/Plugin_PCZSceneManager.so | grep "vtable for Ogre::PCZPlugin" 
00046e20 d vtable for Ogre::PCZPlugin 

$ nm -C /usr/local/lib/OGRE/Plugin_OctreeZone.so | grep "Ogre::OctreeZonePlugin::OctreeZonePlugin()" 
0000c350 t Ogre::OctreeZonePlugin::OctreeZonePlugin() 
0000c350 t Ogre::OctreeZonePlugin::OctreeZonePlugin() 

$ nm -C /usr/local/lib/OGRE/Plugin_OctreeZone.so | grep "vtable for Ogre::OctreeZonePlugin" 
0000fe20 d vtable for Ogre::OctreeZonePlugin 

그럼, 왜 연결이 실패

문제

내가 몇 가지 정의되지 않은 참조를 얻을 수 있다는 것입니다? GNU ld 2.21.53.20110810과 GCC 4.6.1 (우분투 11.10의 모든 것)을 사용하고 있습니다. 당신의 링커 명령 라이브러리 문제의

+0

빌드 시스템과 싸울 필요가 없습니다. 링커를 호출하는 줄을 복사하여 붙여넣고 원하는대로 편집하십시오. 먼저 시도해보고 중복 제거가 도움이되는지 확인하십시오. – Hbcdev

+0

나는 똑같은 일을했다 ... – lvella

+1

OGRE 라이브러리의 심볼은 * local * (소문자 't')로 표시된다. 라이브러리를 컴파일하는 방법에 문제가 있거나 사용자 코드에서 사용해서는 안되는 심볼을 사용하려고 할 수 있습니다. 또한, 명령 행에서 .so보다'-l'을 사용하지 않아야하는지 확신 할 수 없다. ... –

답변