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