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文件用的,...

从源代码编译OSG

Windows Xp下从源代码编译OSG,使用CMake工具

OSG-VS2015编译第三方库

OSG官网上给了依赖库的cmake工程: ttps://github.com/openscenegraph/OpenSceneGraph 具体来讲,需要以下依赖库: 库名 版本 下载官网 ...

OSG dae插件的编译

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

OSG编译和使用第三方插件3rdParty

一、OSG Core是不提供多数诸如文件读写功能的,如何强行使用,则会提示: 这是因为没有加入相应的插件。 插件的源码位于3rd party中http://openscenegraph.a...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

OSG-获取OSG的源代码和第三方库并编译

获取OSG的源代码有很多方式。 这里说下其中的两个地方,第一就是中国的OSG网站http://www.osgchina.org/,这个网站目前应该是由中国西安恒歌科技维护,同时,西安恒歌科技也是一...

osg for android 学习之六:不支持jpg的纹理格式

结果测试,我这个版本的osg不支持jpg格式的纹理,会提示 Could not find plugin to read objects from file 但目前至少支持tga和rgb格式的,解决...

GDAL库调试(包括跨语言调试)

很多时候都需要调试GDAL库,尤其是像学习GDAL库中的某些算法是如何实现的时候,调试就必不可少了。 首先说明用C++的调试。以VS2008为例进行说明。 编译DEBUG版本的GDAL库,这个可以参考...

新手使用GDAL详细教程

文章是po主参考了很好的GDAL初学者资料,VS2010中项目配置引入GDAL,经过自己的实际操作检验归纳总结的,仅属于半原创。         首先介绍一下实验的环境,win7下32位系统,预先配置...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:osg第三方库的编译笔记-collada,jpeg
举报原因:
原因补充:

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