OSG + vusual studio 2013+win8 使用cmake 配置 问题

来源:互联网 发布:淘宝买家秀福利木耳 编辑:程序博客网 时间:2024/04/30 01:38


能下载的链接  稳定发布版 3.4.0 

路径 :http://www.openscenegraph.org/downloads/

Data:

http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.4.0/data/OpenSceneGraph-Data-3.4.0.zip
源码:
http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.4.0/source/OpenSceneGraph-3.4.0.zip



有博文关于 win7的介绍,找了很久第三库,链接里面都无法下载 。

OSG+VS2013+Win7 环境搭建 (含第三方库下载链接)

OSG+VS2013+Win7 环境搭建,osgvs2013

Win7+VS2013环境下编译OpenSceneGraph-3.4.0 


第三方库链接 


osg(OpenSceneGraph)如何安装 https://zhidao.baidu.com/question/134994354599860285.html

http://blog.csdn.net/allenjiao/article/details/52238309


开始时只找到了 2005年的版本,

按照流程中的步骤三 进行cmake 配置操作:

后来cmake 时候报错如下:





参考最后一篇 : 

Win7+VS2013环境下编译OpenSceneGraph-3.4.0

(后文大部分为转载内容)


1. 源码下载。

    源码以及第三方依赖库(OpenSceneGraph-3.4.0.zip+3rdParty_VC10_x86_x64.zip)
    http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.4.0/source/OpenSceneGraph-3.4.0.zip
    数据(OpenSceneGraph-Data-3.4.0.zip)
    http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.4.0/data/OpenSceneGraph-Data-3.4.0.zip
2. 整理源码,利用CMake生成sln。
   源码路径 E:\OpenSceneGraph\source
   第三方库路径 E:\OpenSceneGraph\3rdParty
   数据路径 E:\OpenSceneGraph\data
   1) 将源码中的CMakeLists.txt拖到CMake里面,为方便新生成文件整理新建build文件夹。
Win7+VS2013环境下编译OpenSceneGraph-3.4.0
   点击Configure,由于第三方库很多没有64位的,所以在此选择Visual Studio 12 2013
Win7+VS2013环境下编译OpenSceneGraph-3.4.0
  2)进行CMake设置。  Win7+VS2013环境下编译OpenSceneGraph-3.4.0
  ACTUAL_3RDPARTY_DIRE:\OpenSceneGraph\3rdParty
  BUILD_OSG_EXAMPLES : 勾上
  CMAKE_INSTALL_PREFIXE:\OpenSceneGraph\source
点击Configure,将BUILD_MFC_EXAMPLE勾上。
Win7+VS2013环境下编译OpenSceneGraph-3.4.0
 点击Generate,生成sln。  Cmake 并不进行编译工作,只是生成具有编译配置的项目文件

生成sln文件,用visual studio 打开后,里面有一个大的解决方案(也叫工程) 工程里面有很多个项目,根据项目的类别分别在不同类别的文件目录下, 项目里面有多个文件


一个项目如下图所示,每个项目通过一个带有  ++的盒子  logo表示:


项目内的菜单:  每个C++文件,通过两个加号: ++logo表示


3. 利用VS2013进行编译
   1)(解决方案--右键--批生成)生成->批生成,ALL-BUILD,选择Debug以及Release两个版本(编译时间看配置,测试i7在3小时左右)。
Win7+VS2013环境下编译OpenSceneGraph-3.4.0
   2)生成->批生成,INSTALL,选择Debug以及Release两个版本。
Win7+VS2013环境下编译OpenSceneGraph-3.4.0
Install过程中可能出现如下错误,关闭VS2013,以管理员身份启动重新编译即可。
Win7+VS2013环境下编译OpenSceneGraph-3.4.0
4. 整理生成文件
   1)新建OpenSceneGraph(D:\OpenSceneGraph)文件夹。
   2)将E:\OpenSceneGraph\source以及E:\OpenSceneGraph\source\build文件夹下的bin,include,lib文件夹拷贝到D:\OpenSceneGraph。
   3)将E:\OpenSceneGraph文件夹下data文件夹拷贝到D:\OpenSceneGraph。
5.设置环境变量
   OSG_FILE_PATH: D:\OpenSceneGraph\data
   PATH: D:\OpenSceneGraph\bin


编译结果:271个错误。    编译耗时3个小时 



------ 已启动全部重新生成:  项目: Plugins zip, 配置: Debug Win32 ------
  Building Custom Rule D:/工具/osg/OpenSceneGraph-3.4.0/src/osgPlugins/zip/CMakeLists.txt
  CMake does not need to re-run because D:\宸ュ叿\osg\OpenSceneGraph-3.4.0\build\src\osgPlugins\zip\CMakeFiles\generate.stamp is up-to-date.
  unzip.cpp
  ZipArchive.cpp
  ReaderWriterZIP.cpp
  正在生成代码...
  osgdb_zip.vcxproj -> D:\工具\osg\OpenSceneGraph-3.4.0\build\bin\osgPlugins-3.4.0\osgdb_zipd.dll
------ 已启动全部重新生成:  项目: ALL_BUILD, 配置: Release Win32 ------
  Building Custom Rule D:/工具/osg/OpenSceneGraph-3.4.0/CMakeLists.txt
  CMake does not need to re-run because D:\宸ュ叿\osg\OpenSceneGraph-3.4.0\build\CMakeFiles\generate.stamp is up-to-date.
------ 已启动全部重新生成:  项目: ALL_BUILD, 配置: Debug Win32 ------
  Building Custom Rule D:/工具/osg/OpenSceneGraph-3.4.0/CMakeLists.txt
  CMake does not need to re-run because D:\宸ュ叿\osg\OpenSceneGraph-3.4.0\build\CMakeFiles\generate.stamp is up-to-date.
========== 全部重新生成:  成功 426 个,失败 108 个,跳过 0 个==========


解决方案 : 

我的环境为: Win764 + VS2005 + zlib1.2.8

zlib1.2.8我使用VS2010来编译。

-------------------------------------------------------------------------------------------------

我导入zlib库的代码如下:

#include "zlib128/zlib.h"
// #pragma comment(lib, "zlib128/zlibwapi.lib")  // 链接zlib动态库
#pragma comment(lib, "zlib128/zlibstat.lib")  // 链接zlib静态库


编译使用zlib的工程,出现错误信息如下:

1>Gzip.obj : error LNK2019: 无法解析的外部符号 _deflateEnd 

1>Gzip.obj : error LNK2019: 无法解析的外部符号 _deflate
1>Gzip.obj : error LNK2019: 无法解析的外部符号 _deflateInit2_
1>Gzip.obj : error LNK2019: 无法解析的外部符号 _inflateEnd
1>Gzip.obj : error LNK2019: 无法解析的外部符号 _inflate
1>Gzip.obj : error LNK2019: 无法解析的外部符号 _inflateInit2_

fatal error LNK1120: 6 个无法解析的外部命令error LNK2019: 无法解析的外部符号 _deflate


从错误信息可以看出,在我使用的每个zlib库函数的前面都多出了一个下划线,如 _deflate,

通过查看zlibwapi.dll的导出函数,发现相应的函数前面并没有下划线,也就难道编译会链接错误了。

------------------------------------------------------------------------------------------------------------------------------------------------------

解决思路:

zlib.h头文件,定义了zlib库的导出函数原型,如:ZEXTERN intZEXPORT deflateEnd OF((z_streamp strm));

注意红色的ZEXPORT ,其原型在zconf.h文件里面定义:

#ifndef ZEXPORT
#  define ZEXPORT 
#endif

看到了吗,默认的ZEXPORT宏,只是个空符号罢了,而实际是其应该表示函数的调用方式。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

解决方法:

在zconf.h文件将ZEXPORT宏的定义改成下面的形式即可:

#ifndef ZEXPORT
#  define ZEXPORT WINAPI
#endif

-----------------------------------------------------------------------------------------------------------------------------------------------------------


第二次进行编译 :




编译结果 :


成功 506 个, 失败18个。   用时几分钟,很快,只是对第一次编译失败的项目进行编译。



将 ZEXPORT define 改回原来,再次进行编译 

结果不变:








编译只需要头文件就够了
符号出错是由于链接的时候才会用

链接出错,两个原因:
第一个是 缺库
第二个是 没告诉它怎么去链,也就是路径


将第三方库 修改为英文路径后

重新 cmake 进行配置


第二次点击config后 如下 :



勾选



generate 后:


编译前目录文件:



vs 打开 sln文件

正在加载解决方案:

正在加载 254个项目

加载完后,左下角:正在初始化项目



无法解析外部符号, 网上资料解决方案之一:

无法解析的外部符号 _auxDIBImageLoadA@4 ,该符号在函数 "private: void __thiscall CLoad3DS::CreateTexture(unsigned int * const,char *,int)" (?CreateTexture@CLoad3DS@@AAEXQAIPADH@Z) 中被引用
解决办法:

在属性中的附加依赖项中粘贴几个库文件名OpenGL32.lib GLu32.lib GLaux.lib 确定后重新生成即可。

编译结束后的输出结果

最终还是没有完全编译成功!


发现一个官网的编译教程,先贴这里 : http://www.osgchina.org/index.php?option=com_content&view=article&id=111:usevscompile&catid=95&Itemid=484




0 0
原创粉丝点击