VS2010+64+OSG3.2.1之四Plugins nvtt编译

Plugins nvtt编译时,依然报出一大堆链接错误,错误如下:

error LNK2019: 无法解析的外部符号 "public: __cdeclnvtt::InputOptions::~InputOptions(void)" (??1InputOptions@nvtt@@QEAA@XZ),该符号在函数 "protected: void __cdeclNVTTProcessor::process(class osg::Image &,enum nvtt::Format,bool,bool,enumosgDB::ImageProcessor::CompressionMethod,enumosgDB::ImageProcessor::CompressionQuality)"(?process@NVTTProcessor@@IEAAXAEAVImage@osg@@W4Format@nvtt@@_N2W4CompressionMethod@ImageProcessor@osgDB@@W4CompressionQuality@78@@Z)中被引用

2>NVTTImageProcessor.obj: error LNK2019: 无法解析的外部符号 "public: __cdeclnvtt::CompressionOptions::~CompressionOptions(void)"(??1CompressionOptions@nvtt@@QEAA@XZ),该符号在函数"protected: void __cdecl NVTTProcessor::process(class osg::Image&,enum nvtt::Format,bool,bool,enumosgDB::ImageProcessor::CompressionMethod,enumosgDB::ImageProcessor::CompressionQuality)"(?process@NVTTProcessor@@IEAAXAEAVImage@osg@@W4Format@nvtt@@_N2W4CompressionMethod@ImageProcessor@osgDB@@W4CompressionQuality@78@@Z)中被引用

2>NVTTImageProcessor.obj: error LNK2019: 无法解析的外部符号 "public: __cdeclnvtt::OutputOptions::~OutputOptions(void)"(??1OutputOptions@nvtt@@QEAA@XZ),该符号在函数"protected: void __cdecl NVTTProcessor::process(class osg::Image&,enum nvtt::Format,bool,bool,enum osgDB::ImageProcessor::CompressionMethod,enumosgDB::ImageProcessor::CompressionQuality)"(?process@NVTTProcessor@@IEAAXAEAVImage@osg@@W4Format@nvtt@@_N2W4CompressionMethod@ImageProcessor@osgDB@@W4CompressionQuality@78@@Z)中被引用

根据以往经验,这是由于lib的版本引起,osg自带的nvtt.lib是32位版本的,而我们需要64版本的,所以只有下载nvtt,自己编译。

在百度上搜nvtt,找了半天找不到其库文件。

过来n天,又在百度上继续搜索,后来发现百度libnvtt能够搜到其库文件:nvidia-texture-tools-2.0.8-1+dfsg。下载后解压,发现其src目录下有CMakeLists.txt文件,用cmake生成vs2010工程文件,老是报错,无法生成。后来发现在src目录下有nvtt文件夹,下面有CMakeLists.txt文件,好的,那就利用这个CMakeLists.txt文件生成vs2010工程文件。生成后,编译nvtt,提示找不到头文件。进行如下设置:

将包含目录中添加nvidia-texture-tools-2.0.8-1+dfsg\src目录(注意目录名的完整性)

将nvidia-texture-tools-2.0.8-1+dfsg\src\ 目录下的文件nvconfig.h.in改名为nvconfig.h,

再编译,提示错误如下:

2>D:\soft\GIS\sdk\nvidia-texture-tools-2.0.8-1+dfsg\src\nvcore\TextWriter.cpp(32):error C3861: “va_start”: 找不到标识符

2>D:\soft\GIS\sdk\nvidia-texture-tools-2.0.8-1+dfsg\src\nvcore\TextWriter.cpp(35):error C3861: “va_end”: 找不到标识符

2>D:\soft\GIS\sdk\nvidia-texture-tools-2.0.8-1+dfsg\src\nvcore\TextWriter.cpp(44):error C3861: “va_end”: 找不到标识符

解决方法:

在TextWriter.cpp中添加:#include<stdarg.h>

再编译,提示链接错误如下:

2>nvtt.lib(OptimalCompressDXT.obj): error LNK2001: 无法解析的外部符号 "void * __cdeclnv::mem::malloc(unsigned __int64)" (?malloc@mem@nv@@YAPEAX_K@Z)

2>nvtt.lib(Compressor.obj): error LNK2019: 无法解析的外部符号 "void * __cdeclnv::mem::malloc(unsigned __int64)" (?malloc@mem@nv@@YAPEAX_K@Z),该符号在函数 "private: bool __cdeclnvtt::Compressor::Private::compressMipmap(struct nvtt::Mipmap const&,struct nvtt::InputOptions::Private const &,structnvtt::CompressionOptions::Private const &,structnvtt::OutputOptions::Private const &)const "(?compressMipmap@Private@Compressor@nvtt@@AEBA_NAEBUMipmap@3@AEBU1InputOptions@3@AEBU1CompressionOptions@3@AEBU1OutputOptions@3@@Z)中被引用

2>nvtt.lib(CompressDXT.obj): error LNK2001: 无法解析的外部符号 "void * __cdeclnv::mem::malloc(unsigned __int64)" (?malloc@mem@nv@@YAPEAX_K@Z)

2>nvtt.lib(CompressRGB.obj): error LNK2001: 无法解析的外部符号 "void * __cdeclnv::mem::malloc(unsigned __int64)" (?malloc@mem@nv@@YAPEAX_K@Z)

2>nvtt.lib(QuickCompressDXT.obj): error LNK2001: 无法解析的外部符号 "void * __cdeclnv::mem::malloc(unsigned __int64)" (?malloc@mem@nv@@YAPEAX_K@Z)

2>nvtt.lib(CudaCompressDXT.obj): error LNK2001: 无法解析的外部符号 "void * __cdeclnv::mem::malloc(unsigned __int64)" (?malloc@mem@nv@@YAPEAX_K@Z)

2>nvtt.lib(InputOptions.obj): error LNK2001: 无法解析的外部符号 "void * __cdeclnv::mem::malloc(unsigned __int64)" (?malloc@mem@nv@@YAPEAX_K@Z)

2>nvtt.lib(CompressionOptions.obj): error LNK2001: 无法解析的外部符号 "void * __cdecl

分析nvtt库文件,发现在src目录下还有nvcore、nvimage、nvmath三个目录,其目录下也有CMakeLists.txt文件,估计nvtt需要上述三个产生的库文件,于是分别用cmake产生vs2010工程文件,然后编译,产生相应的库文件如下:

C:\SDK\nvcore\Debug\nvcore.lib

C:\SDK\nvimgae\Debug\nvimage.lib

C:\SDK\nvmath\Debug\nvmath.lib

将上述库文件在nvtt的工程文件中作为链接器-输入的内容,再编译,nvtt编译通过,得到nvtt.lib,用该文件替换原有的文件,debug版的Plugins nvtt编译通过。如果编译时,还发生链接错误,请编译相应的lib,然后作为链接输入即可。

编译好的NVTT库文件下载地址:

http://download.csdn.net/detail/nuaaqsm0915/7848585

编译好的osgdb_nvtt.dll下载地址:

http://download.csdn.net/detail/nuaaqsm0915/7849633

 

你可能感兴趣的:(64位,plugins,OSG,nvtt)