尝试使用 osgText 和 freetype link 时出错

Error trying to link with osgText and freetype

我已经检查了几十个关于这个的网页和配置。 我很绝望,因为我真的需要尽快使用这个功能。

这些是我的设置:

我正在编译 "OpenSceneGraph 3.0 - Beginner's Guide" 一书中的一个示例,第 297-299 页,关于在 OSG 上使用文本,这需要一个额外的插件,freetype (http://www.freetype.org/),已安装。

示例编译正确。 我想我拥有所有必需的包含文件和库。

问题出现在link阶段。它总是给我这个错误:

/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

我检查过我有文件:

我运行没主意了。 :(
有人可以帮助我吗?

我的问题到此为止,但如果您想查看我的文件,请在下面找到它们。

导致此问题的代码:

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();
}

这些是我正在使用的特定于 osgText 操作的包含文件,除了我在我的项目中已经需要的所有其他文件:

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

这是我的 "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 )

问题出在 "CMakeLists.txt" 文件上。 显然,config_project 宏需要 所有大写 字母。我不完全明白为什么。 为了使项目 link 正确,我在该文件的最后四行将对库名称的引用切换为大写,例如:

  • config_project(osg_demos OSGTEXT)

而不是:

  • config_project(osg_demos osgText )

因为这个真是一场噩梦...