查看: 3670|回复: 20

新手遇到编译问题,请教

[复制链接]

该用户从未签到

发表于 2010-1-19 20:17:56 | 显示全部楼层 |阅读模式
本帖最后由 relive007 于 2010-1-19 20:20 编辑

使用Visual Studio 2003.Net编译OpenSCeneGraph-2.8.2,每次编译项目osgDB的时候都遇到以下问题:

------- 已启动生成: 项目: osgDB,配置: Debug|Win32 -------

命令行      正在创建临时文件“e:\Osg\build\src\osgDB\osgDB.dir\Debug\RSP000009.rsp”,其内容为
[
/Od /I "E:\OSG\build\include" /I "E:\OSG\OpenSceneGraph-2.8.2\include" /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "_SCL_SECURE_NO_WARNINGS" /D "_CRT_SECURE_NO_DEPRECATE" /D "OSG_DEBUG_POSTFIX=d" /D "OSGDB_LIBRARY" /D "OSG_DEFAULT_LIBRARY_PATH=C:/Program" /D "OSG_PLUGIN_EXTENSION=.dll" /D "CMAKE_INTDIR=\"Debug\"" /D "osgDB_EXPORTS" /D "_WINDLL" /D "_MBCS" /FD /EHsc /RTCs /MDd /GS /GR /Fo"osgDB.dir\Debug\\" /Fd"E:/OSG/build/lib/Debug/../../bin/osg55-osgDBd.pdb" /W4 /c /Zi /TP   /Zm1000 /wd4706 /wd4127 /wd4100 Files/OpenSceneGraph/lib/osgPlugins-2.8.2
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\WriteFile.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\Version.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\SharedStateManager.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\Registry.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\ReadFile.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\ReaderWriter.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\PluginQuery.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\Output.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\Input.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\ImagePager.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\ImageOptions.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\fstream.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\FileUtils.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\FileNameUtils.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\FileCache.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\FieldReaderIterator.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\FieldReader.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\Field.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\DynamicLibrary.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\DotOsgWrapper.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\DatabasePager.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\ConvertUTF.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\AuthenticationMap.cpp"
"\Osg\OpenSceneGraph-2.8.2\src\osgDB\Archive.cpp"
]
正在创建命令行“cl.exe @e:\Osg\build\src\osgDB\osgDB.dir\Debug\RSP000009.rsp /nologo”
正在编译...
osgPlugins-2.8.2
c1xx : fatal error C1083: 无法打开源文件:“Files/OpenSceneGraph/lib/osgPlugins-2.8.2”: No such file or directory
WriteFile.cpp
Version.cpp
SharedStateManager.cpp
Registry.cpp
ReadFile.cpp
ReaderWriter.cpp
PluginQuery.cpp
Output.cpp
Input.cpp
ImagePager.cpp
ImageOptions.cpp
fstream.cpp
FileUtils.cpp
FileNameUtils.cpp
结果      生成日志保存在“file://e:\Osg\build\src\osgDB\osgDB.dir\Debug\BuildLog.htm”中
osgDB - 1 错误,0 警告

提示无法打开源文件:“Files/OpenSceneGraph/lib/osgPlugins-2.8.2”: No such file or directory。请问这个问题该如何解决,万分感谢!

该用户从未签到

发表于 2010-1-19 20:31:32 | 显示全部楼层
你把配置改成:release|Win32 -------试试

该用户从未签到

 楼主| 发表于 2010-1-19 20:41:45 | 显示全部楼层
2# monai1875

谢谢您的回复,修改后的编译结果

------ 已启动生成: 项目: osgDB, 配置: Release Win32 ------
正在删除项目“osgDB”(配置“Release|Win32”)的中间文件和输出文件。
Building Custom Rule E:/OSG/OpenSceneGraph-2.8.2/src/osgDB/CMakeLists.txt
-- searching TIFF -->tiff.h<-->libtiff<-->E:/OSG/3rdparty<--
-- searching FREETYPE -->ft2build.h<-->freetype;freetype234;freetype234MT;freetype235;freetype237<-->E:/OSG/3rdparty<--
-- searching CURL -->curl/curl.h<-->libcurl;curllib<-->E:/OSG/3rdparty<--
-- searching JPEG -->jpeglib.h<-->libjpeg<-->E:/OSG/3rdparty<--
-- searching GLUT -->GL/glut.h<-->glut32<-->E:/OSG/3rdparty<--
-- searching GIFLIB -->gif_lib.h<-->ungif;libungif<-->E:/OSG/3rdparty<--
-- searching ZLIB -->zlib.h<-->z;zlib;zlib1<-->E:/OSG/3rdparty<--
-- searching PNG -->png.h<-->libpng;libpng13<-->E:/OSG/3rdparty<--
-- ERROR: wxWidgets was not found.
-- Found JPEG: E:/OSG/3rdParty/lib/libjpeg.lib
-- Found PNG: E:/OSG/3rdParty/lib/libpng13.lib
-- Configuring done
-- Generating done
-- Build files have been written to: E:/OSG/build
正在编译...
osgPlugins-2.8.2
c1xx : fatal error C1083: 无法打开源文件:“Files/OpenSceneGraph/lib/osgPlugins-2.8.2”: No such file or directory

还是提示找不到这个源文件。。。

该用户从未签到

 楼主| 发表于 2010-1-19 22:10:54 | 显示全部楼层
有人知道这是为什么吗?急!!

该用户从未签到

发表于 2010-1-20 08:33:08 | 显示全部楼层
Files/OpenSceneGraph/lib/osgPlugins-2.8.2是您自己设置的吧?也许您使用CMake进行配置的过程中有某个概念性的错误,但是您并没有叙述清楚

该用户从未签到

 楼主| 发表于 2010-1-20 15:16:01 | 显示全部楼层
这个路径不是我设置的啊。我从没有手动修改过这个路径。我的文件放置是这样的。总的路径E:\OSG,下载的源码包和第三方包都放在了这个文件夹下面,分别为:E:\OSG\openscenegraph-2.8.2和E:\OSG\3rdparty.然后新建文件夹E:\OSG\build存放cmake生成的工程文件。但是打开*.sln编译的时候就出了这个问题。。。

该用户从未签到

发表于 2010-1-20 15:51:18 | 显示全部楼层
6# relive007

左侧右键你的工程名-》属性-》链接器-》附加库目录,里面选择你的OSG种lib文件夹所在的位置。
看看这样行吗?

该用户从未签到

发表于 2010-1-20 17:06:32 | 显示全部楼层
如果您的工程是使用CMake配置得到的,那么我想不会有什么问题,也许您需要更详细地说明自己操作的过程。OSG 2.8.2的编译已经十分简便了,我个人从未遇到过这类问题

该用户从未签到

 楼主| 发表于 2010-1-20 17:37:59 | 显示全部楼层
使用cmake的过程是这样的:
    打开cmake,将openscenegraph-2.8.2目录下的cmakelist.txt拖到软件界面上,这时,cmake上方的两个路径都为e:\OSG\openscenegraph-2.8.2,然后修改build的路径为e:\OSG\build。
    路径配置完成后,点configure,进行配置,直到出现的选项全变灰(配置的修改主要是第三方库的路径,就不详细说了吧,这个问题应该与配置项关系不大吧)。基本上就是这样一个过程了。
    至于shell说的这个方法可能不行,因为我根本搜不到提示出错的那个目录。

该用户从未签到

发表于 2010-1-21 08:45:32 | 显示全部楼层
我想那不会有问题。您可以尝试不配置任何第三方库试一试,如果还是出错的话,请检查您所使用的源代码(是否缺失什么东西)和cmake的版本(是否为2.6及以上)。如果有条件的话,您也可以尝试vs2005等更高的编译器版本,不过我个人觉得这不会有什么关联,除非cmake在更新之后对于低版本编译器的支持出现bug

该用户从未签到

 楼主| 发表于 2010-1-21 12:21:43 | 显示全部楼层
谢谢array的热心答复。
我曾经用svn从官网上下载过源码包,但还是一样的问题。昨天安装了vs2005编译也是一样。这个问题真是太奇怪了,好像大家也很少碰到。

该用户从未签到

发表于 2010-1-21 12:51:20 | 显示全部楼层
事实上似乎没有人遇到,请不要配置任何第三方库,直接用cmake配置看一看,如果还是出错的话,我只能认为您的系统或者环境变量的配置习惯存在问题了

该用户从未签到

 楼主| 发表于 2010-1-21 14:50:34 | 显示全部楼层
环境变量需要在编译之前设置吗?这个我没设,是这个的问题吗?

该用户从未签到

发表于 2010-1-21 14:59:50 | 显示全部楼层
CMake之前没有什么要设置的环境变量,除非您的VS环境变量(INCLUDE,LIB)设置有错误,或者您有多个VS版本并且它们的环境变量混淆了。

您可以在Visual Studio 2003 Command Prompt命令行中执行cmake-gui来保证使用统一的编译器环境

该用户从未签到

发表于 2010-1-22 05:04:59 | 显示全部楼层
我是初学者 我没有遇到这个问题 我的注意问题都写到 blog.csdn.net/bq_cui 了
我连C++都是刚开始学

该用户从未签到

 楼主| 发表于 2010-1-23 11:49:45 | 显示全部楼层
本帖最后由 relive007 于 2010-1-23 12:13 编辑

各位,我终于把这个问题解决,但是仍不明白为什么。

过程是这样的: CMake生成解决方案后,我到sln所在文件夹下面的src\osgDB目录下,用记事本打开osgDB.vcproj,同其他的.vcproj文件比较,发现有不同的地方,下面是我摘取的一段。
<Tool Name="VCCLCompilerTool"
AdditionalOptions=" /Zm1000 /wd4706 /wd4127 /wd4100 Files/OpenSceneGraph-2.8.2/lib/osgPlugins-2.8.2"
AdditionalIncludeDirectories="E:\OpenSceneGraph-2.8.2\build\include;E:\OpenSceneGraph-2.8.2\OpenSceneGraph-2.8.2\include;" BasicRuntimeChecks="3"
CompileAs="2"
DebugInformationFormat="3"
ExceptionHandling="1"
InlineFunctionExpansion="0"
Optimization="0" RuntimeLibrary="3"
RuntimeTypeInfo="TRUE"
WarningLevel="4"

注意红颜色的部分,其他的.proj文件为
AdditionalOptions=" /Zm1000 /wd4706 /wd4127 /wd4100"

文中还有几处这样的地方,应该是release、debug等每处皆有一段,没有仔细看。
我将所有的这些地方多出来的路径删掉,再编译,就发现没有问题了。
但是想不清楚为什么我用cmake的时候会出现这样的问题,而且独独是osgDB工程出现。

昨晚编译了一晚上,运行例子绝大部分都可以通过。
自己写了一个小例子(教程上的),release下生成,运行没有问题;debug下生成,运行提示:
Warning: Could not find plugin to read objects from file "cow.osg".

显示一个蓝色背景,看不见模型,真是一波未平一波又起,这个问题还是要请教各位。

说明一下我的编译环境设置,include路径和bin路径都设置了,应该没有问题。链接器命令行配置中的附加选项配置,release是用的不带d的lib,debug用的是带d的lib文件。

该用户从未签到

发表于 2010-1-24 22:26:43 | 显示全部楼层
Warning: Could not find plugin to read objects from file "cow.osg"
我想您很清楚这段英文的意思,正如它所言,没有找到cow.osg这个文件,您需要在运行目录下存在这个模型文件,或者也可以设置OSG_FILE_PATH这个环境变量,并指向此文件所在的路径
另一个可能性是您的插件路径没有设置正确,如果您想要在任何路径下都能够运行OSG程序,那么请把OSG安装后(即执行了INSTALL工程)的bin目录添加到系统的PATH变量中

该用户从未签到

 楼主| 发表于 2010-1-24 23:05:43 | 显示全部楼层
这个文件存在应该没什么问题吧,因为release下运行没问题啊。

我不明白的是为什么release下可以,debug下就不行了呢

该用户从未签到

发表于 2010-1-25 08:46:15 | 显示全部楼层
那恐怕就是您的debug插件的放置位置有问题所致了,或者您的debug工程本身的编译有问题

该用户从未签到

发表于 2010-3-13 21:30:03 | 显示全部楼层
肯定是CMake时还存在问题,重新CMake逐项检查,搜索Files/OpenSceneGraph-2.8.2/lib/osgPlugins-2.8.2,肯定是包含这个得项出了问题,不然也不会在osgDB中出问题,更不会出debug版本插件的问题,耐心检查吧

该用户从未签到

发表于 2010-3-13 21:30:22 | 显示全部楼层
肯定是CMake时还存在问题,重新CMake逐项检查,搜索Files/OpenSceneGraph-2.8.2/lib/osgPlugins-2.8.2,肯定是包含这个得项出了问题,不然也不会在osgDB中出问题,更不会出debug版本插件的问题,耐心检查吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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