查看: 9849|回复: 38

配置问题

[复制链接]

该用户从未签到

发表于 2008-9-2 11:28:21 | 显示全部楼层 |阅读模式
我在c/c++常规的附加包含目录中添加了:D:\Program\OpenSceneGraph\include
在链接器常规的附加库目录中添加了:osgd.lib;osgUtild.lib;osgDBd.lib;osgViewerd.lib

然后编写了这样一段代码:
#include<osg/Geode>
#include<osg/Group>
#include<osg/ref_ptr>
void main()
{
        osg::ref_ptr<osg::Geode> geode = new osg::Geode;
}

但是在编译的时候出现了一堆这样的错误:无法解析的外部符号 "__declspec(dllimport) public: __thiscall osg::Geode::Geode(void)" (__imp_??0Geode@osg@@QAE@XZ),该符号在函数 _main 中被引用

我是解决不了了,不知道是哪的问题,还请大家帮忙

该用户从未签到

发表于 2008-9-2 11:46:21 | 显示全部楼层
LIB没有加

该用户从未签到

发表于 2008-9-2 11:58:06 | 显示全部楼层
环境没配置对,检查一下系统的环境变量,或者把osgd.dll复制到工程的当前目录下试试

该用户从未签到

发表于 2008-9-2 12:01:31 | 显示全部楼层
和 DLL 没有关系吧,没有连接上,找不到实现是 lib 的问题

该用户从未签到

发表于 2008-9-2 12:32:16 | 显示全部楼层
但是他已经把osgd.lib加上了。难道楼主用的是Release版本?Release版本需要加osg.lib

该用户从未签到

发表于 2008-9-2 12:32:17 | 显示全部楼层
附加库是osgd.lib之类的没有错,附加库目录应该是你的D:\Program\OpenSceneGraph\lib,这个有没有添加?不然没办法找到依赖库的

该用户从未签到

 楼主| 发表于 2008-9-2 16:39:17 | 显示全部楼层
原帖由 array 于 2008-9-2 12:32 发表
附加库是osgd.lib之类的没有错,附加库目录应该是你的D:\Program\OpenSceneGraph\lib,这个有没有添加?不然没办法找到依赖库的


恩?你的意思是把osgd.lib改成D:\Program\OpenSceneGraph\lib\osgd.lib?

该用户从未签到

发表于 2008-9-2 17:04:16 | 显示全部楼层
原帖由 凌静轩 于 2008-9-2 11:28 发表
我在c/c++常规的附加包含目录中添加了:D:\Program\OpenSceneGraph\include
在链接器常规的附加库目录中添加了:osgd.lib;osgUtild.lib;osgDBd.lib;osgViewerd.lib

然后编写了这样一段代码:
#include
#includ ...

再到C/C++常规的附件包含目录中添加:D:\Program\OpenSceneGraph\lib啊

该用户从未签到

 楼主| 发表于 2008-9-2 17:27:51 | 显示全部楼层
额,还是有错误啊

该用户从未签到

发表于 2008-9-2 17:38:58 | 显示全部楼层
把osgd.lib复制到你工程的工作目录试试

该用户从未签到

发表于 2008-9-2 17:44:57 | 显示全部楼层
设置附加包含目录,属性 c++里面

该用户从未签到

发表于 2008-9-2 17:45:13 | 显示全部楼层
或者项目配置里面设置

该用户从未签到

 楼主| 发表于 2008-9-2 18:30:04 | 显示全部楼层
原帖由 Sailent 于 2008-9-2 17:38 发表
把osgd.lib复制到你工程的工作目录试试


还有有错……

该用户从未签到

 楼主| 发表于 2008-9-2 18:31:30 | 显示全部楼层
原帖由 teli 于 2008-9-2 17:44 发表
设置附加包含目录,属性 c++里面


是在c++里添加D:\Program\OpenSceneGraph\lib吧,添加了,还是有错啊

该用户从未签到

发表于 2008-9-2 20:12:17 | 显示全部楼层
原帖由 凌静轩 于 2008-9-2 18:31 发表


是在c++里添加D:\Program\OpenSceneGraph\lib吧,添加了,还是有错啊


不是在C++选项卡里面,而是链接库的依赖目录(Linker->General->Additional Library Directories)。
把osgd.lib之类的都改成绝对路径也不是不可以,那样的话每一个依赖库文件都要写成那种格式
如果还是感觉解决不了,可以把完整的工程文件打包发上来看一下。我猜想是您的链接库依赖目录没有设置好造成的

该用户从未签到

 楼主| 发表于 2008-9-2 21:17:12 | 显示全部楼层
这是那个工程,您帮我看看吧

a.rar

1.38 MB, 下载次数: 154, 下载积分: 威望 1

该用户从未签到

发表于 2008-9-2 21:41:33 | 显示全部楼层
原帖由 凌静轩 于 2008-9-2 21:17 发表
这是那个工程,您帮我看看吧


您的链接库设置完全不对……
Linker->General->Additional Library Directories要设置为目录,例如:D:\Program\OpenSceneGraph\lib
Linker->Input->Additional Dependencies要设置为依赖库文件,例如:osg.lib,osgViewer.lib等,不必再加上路径。

您把osg.lib等依赖库文件名称添加到“Additional Library Directories”中了,这个怎么都不可能正确的~~

该用户从未签到

 楼主| 发表于 2008-9-2 22:06:12 | 显示全部楼层

改好了,可是又回到以前那个问题了,程序初始化失败……

该用户从未签到

发表于 2008-9-2 22:32:52 | 显示全部楼层
原帖由 凌静轩 于 2008-9-2 22:06 发表

改好了,可是又回到以前那个问题了,程序初始化失败……


您的OSG是如何获取的?自己编译源代码得到?还是下载了EXE自安装包?

请保证OSG库文件(osg.lib,osgViewer.lib等)和您的应用程序是在同一操作系统环境和编程环境下生成的。例如,如果您使用的是基于VS2005SP1的自安装包直接得到OSG的库文件,那么您的应用程序也必须在VS2005Sp1下编译,否则很可能出现初始化失败的问题。
如果您是自己编译源代码得到的OSG库,那么只要用相同的编译器编译您自己的程序就可以了,VS2003/2005/2008,甚至VC6,都不受限制,这也是推荐您自己编译OSG源代码的原因之一。

还有一种初始化失败的情况是在Release版本下使用了Debug版本的依赖库,即osgd.lib等。请注意排查

该用户从未签到

 楼主| 发表于 2008-9-3 01:45:06 | 显示全部楼层
我自己编译了,结果除了一堆错误fatal error LNK1104: 无法打开文件“..\..\lib\OpenThreads.obj的问题,已经二百多个了,我等不下去了,就终止了,怎么办啊

该用户从未签到

发表于 2008-9-3 08:21:21 | 显示全部楼层
原帖由 凌静轩 于 2008-9-3 01:45 发表
我自己编译了,结果除了一堆错误fatal error LNK1104: 无法打开文件“..\..\lib\OpenThreads.obj的问题,已经二百多个了,我等不下去了,就终止了,怎么办啊


您编译的是哪个版本?我记得2.6等稳定版本应该还是能很顺利地编译过去的

该用户从未签到

 楼主| 发表于 2008-9-3 16:10:25 | 显示全部楼层
2.4.0

该用户从未签到

发表于 2008-9-3 16:16:30 | 显示全部楼层
原帖由 凌静轩 于 2008-9-3 01:45 发表
我自己编译了,结果除了一堆错误fatal error LNK1104: 无法打开文件“..\..\lib\OpenThreads.obj的问题,已经二百多个了,我等不下去了,就终止了,怎么办啊

我也遇到过这个问题。每编译一次都要2-3个小时,出错了又要重新编译过,错个3次就到下班时间了,所以干脆在中转站上下了可执行程序。

该用户从未签到

 楼主| 发表于 2008-9-3 16:38:24 | 显示全部楼层
可是直接下的可执行程序一编译就会出现“程序初始化失败”

该用户从未签到

发表于 2008-9-3 16:42:40 | 显示全部楼层
原帖由 凌静轩 于 2008-9-3 16:38 发表
可是直接下的可执行程序一编译就会出现“程序初始化失败”


直接下的可执行程序的话,一定要知道它是在什么环境下编译的,比如VS2005SP1。您的编程环境如果与之不同的话,就很可能出错,这是使用可执行文件包的局限性

该用户从未签到

 楼主| 发表于 2008-9-3 17:03:10 | 显示全部楼层
我的环境是vs2008的,我应该用哪个啊

该用户从未签到

发表于 2008-9-3 17:28:03 | 显示全部楼层
这个问题应该不难,你C++他附加路径都可以不加,但是你的VC option的系统路径一定要引入 1)head include 2)lib 3)execute三个指向你OSG安装路径下的文件夹。并把他们移置顶部。

(DEBUG)在project的属性的“链接器常规的附加库目录中”添加OpenThreadsd.lib;osgd.lib;osgUtild.lib;osgDBd.lib;osgViewerd.lib
(RELEASE)在project的属性的“链接器常规的附加库目录中”添加OpenThreads.lib;osgd.lib;osgUtil.lib;osgDB.lib;osgViewer.lib

比如你安装在D盘默认路径,OPTION的配置如下
1)head include
D:\Program\OpenSceneGraph\include
2)lib
D:\Program\OpenSceneGraph\lib
D:\Program\OpenSceneGraph\lib\plugin
3)lib
D:\Program\OpenSceneGraph\bin

该用户从未签到

 楼主| 发表于 2008-9-3 17:44:50 | 显示全部楼层
不行啊,怎么办啊,我都弄了快一个月了

该用户从未签到

发表于 2008-9-3 20:10:22 | 显示全部楼层
原帖由 凌静轩 于 2008-9-3 17:44 发表
不行啊,怎么办啊,我都弄了快一个月了


VS2008可能需要自己编译源代码生成文件。
可以参照我写过的一篇教程:http://bbs.osgchina.org/viewthread.php?tid=94

该用户从未签到

 楼主| 发表于 2008-9-4 21:21:30 | 显示全部楼层
额,我就是照你的那个教程弄的,但是总是出fatal error LNK1104: 无法打开文件“..\..\lib\OpenThreads.obj之类的错误,这个能解决吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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