查看: 5030|回复: 9

[求助]怎样在linux下使用osg库写小程序?

[复制链接]

该用户从未签到

发表于 2008-2-28 16:02:00 | 显示全部楼层 |阅读模式
我用的是OpenSceneGraph 2.2 ,安装步骤是osgchina所推荐的:
mkdir build_OpenThreads
cd build_OpenThreads
ccmake ../OpenThreads
make
sudo make install
cd ..

mkdir build_OpenSceneGraph
cd build_OpenSceneGraph
ccmake ../OpenSceneGraph
make
sudo make install
cd ..

export OSG_FILE_PATH=/home/liu/OpenSceneGraph-Data

我从网上抄下了一段小程序:
  1. #include <osgViewer/Viewer>
  2. #include <osgDB/ReadFile>
  3. int main( int, char ** )
  4. {
  5.     osgViewer::Viewer viewer;
  6.     viewer.setSceneData( osgDB::readNodeFile( "cow.osg" ) );
  7.     return viewer.run();
  8. }
复制代码
可是编译时提示:
cd '/home/liu/MyProjects/temp/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" make -k
make all-recursive
Making all in src
linking temp (g++)
linking temp (g++)
temp.o: In function `main':
/home/liu/MyProjects/temp/src/temp.cpp:
26: undefined reference to `osgViewer::Viewer::Viewer()'
/home/liu/MyProjects/temp/src/temp.cpp:27: undefined reference to `osgViewer::Viewer::setSceneData(osg::Node*)'
/home/liu/MyProjects/temp/src/temp.cpp:28: undefined reference to `osgViewer::Viewer::run()'
/home/liu/MyProjects/temp/src/temp.cpp:28: undefined reference to `osgViewer::Viewer::~Viewer()'
/home/liu/MyProjects/temp/src/temp.cpp:28: undefined reference to `osgViewer::Viewer::~Viewer()'
temp.o: In function `osgDB::readNodeFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/local/include/osgDB/ReadFile:107: undefined reference to `osgDB::Registry::instance(bool)'
/usr/local/include/osgDB/ReadFile:107: undefined reference to `osgDB::readNodeFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, osgDB::ReaderWriter::Options const*)'
请问,这是怎么回事?
谢谢。

忘记说了,我用的是ubuntu 7.10。

该用户从未签到

发表于 2008-2-28 17:14:29 | 显示全部楼层
嗯……全部都是未知函数声明
Makfile是怎么写的?-l参数的内容是什么

该用户从未签到

 楼主| 发表于 2008-2-28 17:43:42 | 显示全部楼层
我没写Makefile文件,我想用KDevelop生成,我在KDevelop中单击Build->Build Project后,在debug文件夹下出现一个Makefile文件,文件很长。

还有,生成Makefile文件的命令是qmake吗?我一直用的是qmake和cmake。
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-2-28 18:00:30 | 显示全部楼层
    我曾经这样编译过:
    [教学]关于在Linux下配置OSG 1.9.6
    现在还没有出现OSG196的DEB包或是RPM包,就感觉而言也没有那个必要去那么做,现在来介绍一下在Linux下配置1.96,来解决很多初学者发过来的疑问:

    首先:建议安装CMAKE,笔者安装的是2.46版本,使用的是ubuntu操作系统,当然CMAKE很容易得到,无论是使用新立得,还是在命令行下耍酷。

    其次:下载OSG的1.96或是你希望的版本的包,这个很简单,直接在OSG的官方网站上下载.gz格式的源文件,注意不要下载成EXE的WIN32安装版了。解压到某处。

    再次:在终端下把当前文件夹定位到此处,输入 ./configure回车而后看看有没有错误,而后make回车,看看其中有没有错误,如果这两步都没有错误说明你的人品真是没的说,而后make install看看有没有错误,如果前两步都没有错,这步出错那也是人品没的说。

    最后解释一下错误的解决办法与发生原因:
    OSG编译安装需要很多的依赖,如/usr/include/GL下的OPENGL库等等,这就需要你针对错误去查找这些相应的库,安装其最高版本(一般都有向下兼容的功能,通过ln -s),OPENGL库,X11下的Xmu库(libxmu)等等都是必须的,由于需要的库很多而且大多数都容易找到,所以不在这里细说,一般它会提示找不到某某头文件,这时就上百度(爱国)查一下这个头文件是哪个库里头的。
    还有一种错很无耐,我归结为人品错,当编译到一定程序时,它会提示什么有错,可能是硬件或是OS(操作系统)有错,这时说明比较倒霉,不能让你边喝咖啡边聊天边安装此OSG,重新开始就可以了,以前编译过的,它不会计时的,会接着编译,就可以了。所以需有人值守,比不得VS6..0编0.99的时代了。
    最后排完错,安装完,就可以在LINUX下使用炫目的OSG了,祝你一次成功~~~
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-2-28 18:02:28 | 显示全部楼层
    编译成功后,当时记得使用的是 Code::Block+Wx 试了一个程序,成功~~~~~~
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-2-28 18:03:24 | 显示全部楼层
    还有这样:
    [教学]Linux下OSG 2.0 的安装
    现在OSG官网上提供OSG的源,别的源一般都只有1.2,中科大的有1.2,国内别的地方的都0.99,可以在源中添加:

    deb http://openscenegraph.dachary.or ... debian/unstable/src ./
    deb-src http://openscenegraph.dachary.or ... debian/unstable/src ./

    这个一般都含有最新的OSG库,按道理来讲一般这样就可以了,但是在安装依赖时发现很多依赖的版本,中国的源的最高版本也达不到要求(我找了中科大的,清华的,都靠不住,就没有再试了),于是乎得修改成最新的源,这是优版图官网上的源,速度还湊打胡:

    deb http://http.us.debian.org/debian stable main contrib non-free
    deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
    deb http://security.debian.org stable/updates main contrib non-free
    最后完整的源应该是:
    deb http://http.us.debian.org/debian stable main contrib non-free
    deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
    deb http://security.debian.org stable/updates main contrib non-free
    deb http://openscenegraph.dachary.or ... debian/unstable/src ./
    deb-src http://openscenegraph.dachary.or ... debian/unstable/src ./

    最后激动人心的时刻到了: @sudo apt-get update
    估计你立马都疯了,我用的应该是中国最新的源了,仍 然需要更新二百多个,真落后,最后@sudo apt-get install openscenegraph 这样就可以了,所有依赖都可以安装完毕

    FreeSouth

    该用户从未签到

     楼主| 发表于 2008-2-28 18:11:16 | 显示全部楼层
    我先要谢谢您,大概我没讲清楚,我已经编译好了OSG。
    我不明白的是,怎样设置,才能开始写自己的程序,您能讲讲您的那个程序是怎样建立、编译的吗?

    该用户从未签到

    发表于 2008-2-28 19:28:33 | 显示全部楼层
    原帖由 HelloWorld! 于 2008-2-28 17:43 发表
    我没写Makefile文件,我想用KDevelop生成,我在KDevelop中单击Build->Build Project后,在debug文件夹下出现一个Makefile文件,文件很长。

    还有,生成Makefile文件的命令是qmake吗?我一直用的是qmake和cmake。


    呵呵,核心的问题是你可能没有链接OSG的静态库,就像我们在VC中要添加“附加依赖库”一样,Linux下同样要使用-losg -losgDB -losgViewer之类的标志来指定gcc编译的依赖库~~
    qmake是QT专用的简易工程编译工具,cmake是专用于生成工程的~~这两个都不是我们所需要的,至少不是所必须的
    Makefile可以自己写,也可以使用automake自动生成。至于Makefile的写法,您不妨参考一下网上多如牛毛的教学指南~~

    至于KDevelop……呵呵,我几乎没有用过,我是VIM Fan

    该用户从未签到

     楼主| 发表于 2008-2-28 19:37:25 | 显示全部楼层
    我不用KDevelop了,我改用VIM。

    该用户从未签到

    发表于 2008-7-3 19:20:08 | 显示全部楼层
    Eclipse + CDT也很不错 简单好用 就是稍慢一些 和可以吧
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表