我是这个论坛的新手,但我在尝试寻找这个问题的解决方案时已经看过几次了。我正在尝试使用我在Ubuntu中找到的C ++ API库( libkml-dev_1.2.0-1ubuntu6_amd64 )生成要在Google地球中使用的KML文件。我使用命令 sudo apt-get install libkml-dev 安装了软件包,恢复成功。之后,我使用命令行终端导航到examples文件夹,尝试使用命令 g ++ helloworld.cc -o helloworld 执行程序'helloworld.cc',但后来遇到了一大堆错误(主要声称kmldom是未定义的参考)。对不起,我想附上文本文件,但不知道我是如何包含下面的错误示例的。我整个星期都搜索过高低,确保头文件确实包含在下载中,甚至联系了谷歌地球开发者关于这个问题(他们回答说他们与此无关,并重定向所有关于这个问题到StackOverflow)。
有谁知道造成这个问题的原因以及我可以做些什么来解决这个问题所以我可以继续前进???
提前谢谢。
/tmp/cc5u2JyV.o:在函数HelloKml(bool)':
helloworld.cc:(.text+0x17): undefined reference to
kmldom :: KmlFactory :: GetFactory()'
helloworld.cc:(.text+0x27):未定义引用kmldom::KmlFactory::CreateCoordinates() const'
helloworld.cc:(.text+0x328): undefined reference to
kmldom :: AsPoint(boost :: intrusive_ptr)'
/tmp/cc5u2JyV.o:在函数boost::intrusive_ptr<kmldom::Coordinates>::intrusive_ptr(kmldom::Coordinates*, bool)':
helloworld.cc:(.text._ZN5boost13intrusive_ptrIN6kmldom11CoordinatesEEC2EPS2_b[_ZN5boost13intrusive_ptrIN6kmldom11CoordinatesEEC5EPS2_b]+0x3d): undefined reference to
kmlbase :: intrusive_ptr_add_ref(kmlbase :: Referent *)'
/tmp/cc5u2JyV.o:在函数boost::intrusive_ptr<kmldom::Coordinates>::~intrusive_ptr()':
helloworld.cc:(.text._ZN5boost13intrusive_ptrIN6kmldom11CoordinatesEED2Ev[_ZN5boost13intrusive_ptrIN6kmldom11CoordinatesEED5Ev]+0x23): undefined reference to
kmlbase :: intrusive_ptr_release(kmlbase :: Referent *)'
/tmp/cc5u2JyV.o:在函数boost::intrusive_ptr<kmldom::Geometry>::intrusive_ptr(boost::intrusive_ptr<kmldom::Geometry> const&)':
helloworld.cc:(.text._ZN5boost13intrusive_ptrIN6kmldom8GeometryEEC2ERKS3_[_ZN5boost13intrusive_ptrIN6kmldom8GeometryEEC5ERKS3_]+0x35): undefined reference to
kmlbase :: intrusive_ptr_add_ref(kmlbase :: Referent *)'
collect2:ld返回1退出状态
答案 0 :(得分:1)
编译使用库的应用程序时,需要在应用程序编译时链接它。因此,请尝试使用以下参数:
要指定搜索lib的目录,请使用-L:
-L/data[...]/lib
要指定实际的库名称,请使用-l:
-labc
(链接abc.a或abc.so)
要指定搜索包含文件的目录,请使用-I:
-I/data[...]/lib