2015-04-07 1 views
0

J'ai déjà vérifié des dizaines de pages Web et de configurations à ce sujet. Je suis désespérée parce que j'ai vraiment besoin d'utiliser cette fonctionnalité et bientôt.Erreur lors de la tentative de liaison avec osgText et freetype

Ce sont mes paramètres:

  • Langue: C++
  • Bibliothèques: OpenSceneGraph (OSG) v3.2.0
  • OS: Xubuntu 14.04 (sur une machine virtuelle VMWare Player)

Je compile un exemple du livre "OpenSceneGraph 3.0 - Guide du débutant", pages 297-299, concernant l'utilisation de texte sur OSG, qui nécessite un plug-in supplémentaire, type freetype (http://www.freetype.org/), qui ch est installé.

L'exemple compile correctement. Je pense avoir tous les fichiers et bibliothèques inclus.

Le problème survient dans la phase de liaison. Il me donne toujours cette erreur:

/usr/bin/ld: CMakeFiles/osg_demos.dir/osg_demos.cpp.o: undefined reference to symbol '_ZN7osgText12readFontFileERKSsPKN5osgDB7OptionsE' 
//usr/lib/libosgText.so.99: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 
make[2]: *** [osg_demos] Error 1 
make[1]: *** [CMakeFiles/osg_demos.dir/all] Error 2 
make: *** [all] Error 2 

J'ai vérifié que j'ai les fichiers:

  • « /usr/lib/libosgText.so.99 » qui est un lien vers le fichier lib réel: "libosgText.so.3.2.0".
  • "/usr/lib/osgPlugins-3.2.0/osgdb_freetype.so" la dépendance externe de la bibliothèque osgText.

Je n'avais plus d'idées. :(
quelqu'un peut me aider

Ma question s'arrête ici, mais si vous voulez vérifier mes fichiers, s'il vous plaît les trouver ci-dessous

Le code responsable de ce problème:?.

osgText::Text* createText(const osg::Vec3& pos, 
      const std::string& content, float size) { 
    osg::ref_ptr<osgText::Font> g_font = osgText::readFontFile("arial.ttf"); 
    osg::ref_ptr<osgText::Text> text = new osgText::Text; 
    text->setFont(g_font.get()); 
    text->setCharacterSize(size); 
    text->setAxisAlignment(osgText::TextBase::XY_PLANE); 
    text->setPosition(pos); 
    text->setText(content); 
    return text.release(); 
} 

ce sont les fichiers à inclure que j'utilise qui sont spécifiques aux opérations osgText, à l'exception de tous les autres que je l'ai déjà besoin sur mon projet:

#include <osg/Camera> 
#include <osgText/TextBase> 
#include <osgText/Font> 
#include <osgText/Text> 

Ceci est mon fichier "CMakeLists.txt":

cmake_minimum_required(VERSION 2.6) 
project(OSG_DEMOS) 

find_package(OpenThreads) 
find_package(osg) 
find_package(osgDB) 
find_package(osgGA) 
find_package(osgUtil) 
find_package(osgViewer) 
find_package(osgText)   # Needed for demo: writeText() 
find_package(osgShadow)  # Needed for demo: writeText() 
find_package(osgParticle)  # Needed for demo: writeText() 
find_package(osgFX)   # Needed for demo: writeText() 
find_package(PCL 1.6 COMPONENTS) 

set(CMAKE_CXX_FLAGS "-g -Wno-deprecated") 

macro(config_project PROJNAME LIBNAME) 
    include_directories(${${LIBNAME}_INCLUDE_DIR}) 
    target_link_libraries(${PROJNAME} ${${LIBNAME}_LIBRARIES}) 
endmacro() 

add_executable(osg_demos osg_demos.cpp) 

config_project(osg_demos OPENTHREADS) 
config_project(osg_demos OSG) 
config_project(osg_demos OSGDB) 
config_project(osg_demos OSGGA) 
config_project(osg_demos OSGUTIL) 
config_project(osg_demos OSGVIEWER) 
config_project(osg_demos osgText) 
config_project(osg_demos osgShadow) 
config_project(osg_demos osgParticle) 
config_project(osg_demos osgFX) 
+0

Avez-vous essayé l'exemple 'osgtext' fourni avec l'installation' OSG'? Est-ce que ça marche? Et n'avez-vous pas besoin de faire un lien avec 'Freetype' aussi? –

+0

Non, je n'ai pas essayé cette démo. En ce qui concerne le Freetype, je pense qu'il est déjà relié en interne par OSG. Quoi qu'il en soit, ce problème est déjà résolu. Je poste la réponse ci-dessous. –

Répondre

0

Le problème était sur le fichier "CMakeLists.txt". Apparemment, la macro config_project requiert toutes les lettres majuscules. Je ne comprends pas exactement pourquoi. Pour faire le lien du projet correctement, je suis passé en majuscule la référence au nom de la bibliothèque sur les quatre dernières lignes de ce fichier, comme:

  • config_project (osg_demos OSGTEXT)

au lieu de:

  • config_project (osg_demos osgText)

Quel cauchemar juste parce que o f this ...

+0

Ne foget pas d'accepter la réponse !! :) –