查看: 3932|回复: 12

如何将OSGGIS用CMake编译成vs7的工程。

[复制链接]

该用户从未签到

发表于 2009-8-15 17:33:26 | 显示全部楼层 |阅读模式
如题。
我是OSGGIS的菜鸟,对这个很感兴趣,希望有人能够帮我一下。恩,在此之前我下载了一个OSGGIS的源代码,通过svn。现在不知道怎么用。

谢谢先

该用户从未签到

发表于 2009-8-15 23:09:04 | 显示全部楼层
您的标题已经回答您的问题了,下载CMake,然后把CMakeLists.txt加载到其中,然后按照提示操作就可以了

该用户从未签到

 楼主| 发表于 2009-8-16 16:15:49 | 显示全部楼层
用CMake编译的时候会出现很多红字,使得编译通不过。
就是下面的图片了。
是不是还需要怎么配置一下。
Cmake_OSGGIS.PNG
Cmake_OSGGIS_2.PNG

该用户从未签到

发表于 2009-8-16 17:47:15 | 显示全部楼层
需要或者值得配置的项有以下几个:
CMAKE_INSTALL_PREFIX:安装路径前缀
EXPAT_...:libExpat库的路径和库文件,这个库用于实现XML文件解析
GDAL_...:GDAL库的路径和库文件,它是地理数据的核心解析者
LUA_...:Lua库的相关内容,用于实现Lua语言的封装
OSG...:OSG库的相关内容,这个不必说了

其它使用CMake配置的工程皆同一理,您不妨自己多实验几次,很快就会入门

该用户从未签到

 楼主| 发表于 2009-8-17 13:57:41 | 显示全部楼层

谢谢,看了你的《你所不知的OSG》。

现在已经可以生成vs2003的解决方案了

但是编译的时候出现了新的错误
LINK : fatal error LNK1104: 无法打开文件“osgGISd.lib”
的错误


再次感谢你的回复。
:)

该用户从未签到

发表于 2009-8-17 15:03:14 | 显示全部楼层
是编译哪个工程的时候出现了错误?还有没有别的错误?
生成VS工程并不代表配置正确了,有可能有的选项还是错误

该用户从未签到

 楼主| 发表于 2009-8-17 15:37:36 | 显示全部楼层


仔细的重新编译了一遍

实际上是出现了两个错误:

1.GeoPoint.cpp(164) : error C2679: 二进制“*” : 没有找到接受“<未知>”类型的右操作数的运算符(或没有可接受的转换)

代码具体位置为:
    return GeoPoint(
        (*this) * getSRS()->getInverseReferenceFrame(),
        getSRS()->cloneWithNewReferenceFrame( osg::Matrix::identity() ) );

2.LINK : fatal error LNK1104: 无法打开文件“osgGISd.lib”

该用户从未签到

 楼主| 发表于 2009-8-17 15:57:19 | 显示全部楼层


那个第一个错误出现在osgGIS项目里面。

第二个错误出现在:
osgGISProjects
App osggis_viewer,
App osggis_simple,
App osggis_makelayer,
App osggis_mapper,
osggis_test_encode,
App osggis_build,

该用户从未签到

发表于 2009-8-17 16:27:40 | 显示全部楼层
第一个错误导致osgGIS.lib没有生成,因此后面的工作都无法进行了。不知您的GDAL库是否指定正确

该用户从未签到

 楼主| 发表于 2009-8-17 18:53:35 | 显示全部楼层
这是我配置的路径
后来我用FWTools的包试了试,也会出现这个错误。
我觉得原因是:GeoPoint类里面没有包含
operator *(osg::matrixd  )
的运算符重载

在它的父类里面也没有这个函数。

恩,是不是我配置的方法不对,还是我下载的源代码不对。
Cmake_OSGGIS_3.PNG

该用户从未签到

 楼主| 发表于 2009-8-17 19:44:28 | 显示全部楼层
恩,后来我尝试这将
GeoPoint
GeoPoint::getAbsolute() const
{
  return GeoPoint(
                (*this) * getSRS()->getInverseReferenceFrame(),
        getSRS()->cloneWithNewReferenceFrame( osg::Matrix::identity() ) );
}
改成
GeoPoint
GeoPoint::getAbsolute() const
{
    osg::ref_ptr<SpatialReference> new_srs =
        getSRS()->cloneWithNewReferenceFrame( osg::Matrixd() );

    return new_srs->transform( *this );
}

我想这样应该就不会出现找不到匹配函数的问题了,但是出现了另外一个错误:
fatal error LNK1262: 链接因“E:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\c2.dll”和 LINK.EXE 的版本不匹配失败

该用户从未签到

发表于 2009-8-18 00:10:52 | 显示全部楼层
您的gdal库还是有问题,建议自己编译一个最新版本得比较好

该用户从未签到

 楼主| 发表于 2009-8-19 15:36:32 | 显示全部楼层
该问题已经解决了。

是版本问题,我用的是vs2005
而网站上提供的预编译的东西是vs2005sp1的东西
导致版本的不同。
如果自己可以把所有的第三方库重新编译一下也是可以的,但是我对这个不熟
所以我到网上找了一个sp1的补丁包,装上之后问题就解决了。

最后感谢array的帮助

希望这些对其他菜鸟会有所帮助

:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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