osg第三方库的编译笔记-collada,jpeg

原创 2013年12月02日 03:02:41

Windows下编译Collada

因为collada的模型是基于xml的在网络传输中使用比较好,其中谷歌地球中使用的模型都是这种格式的,若想在本机上读入dae格式数据就需要这个库支持。

下载好支撑库:

pcre、libxml2、zlib、boost;确保这些库都正确编译过去

在动态编译的时候导出的静态成员没有在调用这个类的实现文件里面声明就会产生如下的错误:

1>daeURI.obj : error LNK2001: unresolved external symbol "public: static class pcrecpp::Arg pcrecpp::RE::no_arg" (?no_arg@RE@pcrecpp@@2VArg@2@A)

daeURI.cpp中添加这么一句就没有问题了,

pcrecpp::Arg pcrecpp::RE::no_arg((void*)NULL);

这个解决方案指标不治本,根本的原因在于静态链接版本需要添加PCRE_STATIC宏,然而动态版本的不需要,现在PCRE库默认给动态版本和静态版本都添加了这个宏(visual studio下查看preprocessor选项)过去默认的情况下是都不添加导致静态库出现问题,这是老版本的问题,解决方法是这样的: You need the PCRE_STATIC preprocessor definition in your project. 


至于为什么要添加这个宏可以看他下面的源码:

#ifndef _PCRE_H
#define _PCRE_H
/* When an application links to a PCRE DLL in Windows, the symbols that are
imported have to be identified as such. When building PCRE, the appropriate
export setting is defined in pcre_internal.h, which includes this file. So we
don't change existing definitions of PCRE_EXP_DECL and PCRECPP_EXP_DECL. */

#if defined(_WIN32) && !defined(PCRE_STATIC)
#  ifndef PCRE_EXP_DECL
#    define PCRE_EXP_DECL  extern __declspec(dllimport)
#  endif
#  ifdef __cplusplus
#    ifndef PCRECPP_EXP_DECL
#      define PCRECPP_EXP_DECL  extern __declspec(dllimport)
#    endif
#    ifndef PCRECPP_EXP_DEFN
#      define PCRECPP_EXP_DEFN  __declspec(dllimport)
#    endif
#  endif
#endif

/* By default, we use the standard "extern" declarations. */

#ifndef PCRE_EXP_DECL
#  ifdef __cplusplus
#    define PCRE_EXP_DECL  extern "C"
#  else
#    define PCRE_EXP_DECL  extern
#  endif
#endif

#ifdef __cplusplus
#  ifndef PCRECPP_EXP_DECL
#    define PCRECPP_EXP_DECL  extern
#  endif
#  ifndef PCRECPP_EXP_DEFN
#    define PCRECPP_EXP_DEFN
#  endif
#endif


据说静态库编译时,用到osg的时候编译通不过,我想一定程度上跟这个有关。

collada插件报错

Error: Failed to open  in daeLIBXMLPlugin::readFromFile


Error: Failed to load


Load failed in COLLADA DOM
Load failed in COLLADA DOM conversion


osgviewerd.exe: No data loaded

导致这个问题的根源在于文件路径无法真确解析成URI故libxml无法取到指定的数据。

当然造成读取不了数据的原因有很多种,比如数据格式不符、文件路径不对、文件内部结果错误,在我的案例里是由于文件路径不正确导致的。


google了一下在这里有一个帖子讨论了相关问题,据说是libxml2出了问题。具体还待查。


静态编译jpeg转为动态编译

新建一个空白的动态链接库工程(.dll工程)并命名为 jpegdll。把 jpeg工程 中的源文件和头文件设置复制到 jpegdll 中

接下来从 DLL 中导出接口。打开 jmorecfg.h,把 GLOBAL 的定义改成:
#define GLOBAL(type) __declspec(dllexport) type
把 EXTERN 的定义改成:
#define EXTERN(type) extern __declspec(dllexport) type


VS2010+64+OSG3.2.1之五Plugins dae编译

Plugins dae的编译确实破费一番周折。反反复复试了好多次,最后终于编译成功,特总结如下。 首先了解一下Plugin dae。Plugin dae是用于读取写入以dae为后缀名的3D文件用的,...
  • nuaaqsm0915
  • nuaaqsm0915
  • 2014年09月01日 13:14
  • 1862

OSG dae插件的编译

1.下载COLLADA DOM,并解压缩到D:根目录下,当然你可以根据自己情况放置。下载地址:http://sourceforge.net/projects/collada-dom/files/以及两...
  • shenzi
  • shenzi
  • 2010年01月29日 16:32
  • 3843

WIN7 64位操作系统 编译64位OSG的方法

1.在OSG官网上下载OSG源代码。本人下载的是OSG3.4.0 http://www.openscenegraph.org/index.php/download-section/stable-rel...
  • sven_007
  • sven_007
  • 2016年06月24日 21:18
  • 1103

colladadom2.1+64位+lib

  • 2014年09月01日 09:00
  • 16.33MB
  • 下载

用vc6.0编译OpenSceneGraph第一个程序

(1)源程序#include #include #include #include #include int main(int argc,char *argv[]){ std::string file...
  • xuxinshao
  • xuxinshao
  • 2006年03月14日 10:19
  • 3164

Building Collada

文章声明:由于COLLADA以及IDE版本的更新,本文尽量以最新的版本为准,但是不保证一定适用于当前存在的版本,仅就一些编译上遇到的问题给出一些解答,希望能对需要进行COLLADA编程的人员带来一些帮...
  • blizmax6
  • blizmax6
  • 2013年01月25日 03:54
  • 1253

osg第三方库

  • 2015年04月23日 15:33
  • 21.27MB
  • 下载

OSG-VS2015编译第三方库

OSG官网上给了依赖库的cmake工程: ttps://github.com/openscenegraph/OpenSceneGraph 具体来讲,需要以下依赖库: 库名 版本 下载官网 ...
  • blackrose_li
  • blackrose_li
  • 2017年01月17日 15:30
  • 1725

OSG VS2013环境配置

OSG3.4 VS2013环境搭建 一.相关准备 a) OSG源码 OSG各稳定版本下载链接: OSG版本列表:http://www.openscenegraph.org/downloa...
  • luoming1994130
  • luoming1994130
  • 2016年09月30日 18:59
  • 2948

OSG源码、第三方依赖库、数据

  • 2017年11月01日 17:03
  • 114.71MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:osg第三方库的编译笔记-collada,jpeg
举报原因:
原因补充:

(最多只允许输入30个字)