0

我想在Visual Studio 2015中编译一个我制作的DLL,它用作OpenVDB中某些功能的C兼容包装,使其可用于现有的C项目中。当我建立,但是,我得到以下链接器错误:在DLL中包含OpenVDB;将错误与Visual Studio 2015链接错误

Error LNK2019 unresolved external symbol "__declspec(dllimport) public: class std::shared_ptr<class std::basic_streambuf<char,struct std::char_traits<char> > > __thiscall openvdb::v4_0_1::io::MappedFile::createBuffer(void)const " ([email protected]@[email protected][email protected]@@[email protected][email protected][email protected]@[email protected]@@[email protected]@@[email protected]@XZ) referenced in function "private: void __thiscall openvdb::v4_0_1::tree::LeafBuffer<float,3>::doLoad(void)const " ([email protected][email protected][email protected]@[email protected]@@ABEXXZ) 

Error LNK2019 unresolved external symbol "__declspec(dllimport) class std::shared_ptr<class openvdb::v4_0_1::io::StreamMetadata> __cdecl openvdb::v4_0_1::io::getStreamMetadataPtr(class std::ios_base &)" ([email protected]@[email protected]@@[email protected]@[email protected][email protected]@@@[email protected]@[email protected]@@Z) referenced in function "void __cdecl openvdb::v4_0_1::io::readCompressedValues<float,class openvdb::v4_0_1::util::NodeMask<3> >(class std::basic_istream<char,struct std::char_traits<char> > &,float *,unsigned int,class openvdb::v4_0_1::util::NodeMask<3> const &,bool)" ([email protected][email protected][email protected]@[email protected]@@@[email protected][email protected]@@[email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected]@[email protected][email protected]) 

Error LNK2019 unresolved external symbol "__declspec(dllimport) void __cdecl openvdb::v4_0_1::io::setStreamMetadataPtr(class std::ios_base &,class std::shared_ptr<class openvdb::v4_0_1::io::StreamMetadata> &,bool)" ([email protected]@[email protected]@@[email protected]@@[email protected]@[email protected][email protected]@@@[email protected][email protected]) referenced in function "private: void __thiscall openvdb::v4_0_1::tree::LeafBuffer<float,3>::doLoad(void)const " ([email protected][email protected][email protected]@[email protected]@@ABEXXZ) 

Error LNK2019 unresolved external symbol "__declspec(dllimport) public: static class std::shared_ptr<class openvdb::v4_0_1::math::Transform> __cdecl openvdb::v4_0_1::math::Transform::createLinearTransform(class openvdb::v4_0_1::math::Mat4<double> const &)" ([email protected]@[email protected][email protected]@@[email protected]@[email protected][email protected]@@@[email protected]@[email protected]@[email protected]@Z) referenced in function "public: static class std::shared_ptr<class openvdb::v4_0_1::math::Transform> __cdecl OpenVDB_c::LinearTransform(double,double,double,double,double,double,double,double,double,double,double,double,double,double,double,double)" ([email protected][email protected]@[email protected]@[email protected][email protected]@@@[email protected]@[email protected]) 

Error LNK2019 unresolved external symbol "__declspec(dllimport) public: void __thiscall openvdb::v4_0_1::GridBase::setTransform(class std::shared_ptr<class openvdb::v4_0_1::math::Transform>)" ([email protected]@[email protected]@@[email protected]@[email protected][email protected]@@@[email protected]@@Z) referenced in function [email protected][email protected]@[email protected]@[email protected][email protected]@@@[email protected]@@Z$0 

Error LNK2019 unresolved external symbol "__declspec(dllimport) public: class std::shared_ptr<class openvdb::v4_0_1::GridBase> __thiscall openvdb::v4_0_1::io::File::readGrid(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected]@[email protected][email protected]@@[email protected]@[email protected]@@@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) referenced in function "public: int __thiscall OpenVDB_c::readGrid(int,char *)" ([email protected][email protected]@[email protected]) 

Error LNK2001 unresolved external symbol "public: virtual class std::shared_ptr<class openvdb::v4_0_1::io::Archive> __thiscall openvdb::v4_0_1::io::File::copy(void)const " ([email protected]@[email protected][email protected]@@[email protected]@[email protected][email protected]@@@[email protected]@XZ) 

Error LNK2001 unresolved external symbol "public: virtual void __thiscall openvdb::v4_0_1::io::File::write(class std::vector<class std::shared_ptr<class openvdb::v4_0_1::GridBase const >,class std::allocator<class std::shared_ptr<class openvdb::v4_0_1::GridBase const > > > const &,class openvdb::v4_0_1::MetaMap const &)const " ([email protected]@[email protected][email protected]@@[email protected][email protected][email protected][email protected]@@@[email protected]@[email protected][email protected][email protected][email protected]@@@[email protected]@@[email protected]@[email protected]@[email protected]@@Z) 

Error LNK2001 unresolved external symbol "__declspec(dllimport) private: static union half::uif const * const half::_toFloat" ([email protected]@@[email protected]@B) C:\Users\t00001657\documents\visual studio 2015\Projects\OVDBC\OVDBC\ovdbc.obj 1 

OpenVDB和所有的依赖都在包括文件夹,其目录添加到附加包含目录,这是我目前的附加依赖的列表下连接器选项:

  • blosc.lib
  • cppunit.lib
  • glew32.lib
  • glfw3.lib
  • Half.lib
  • IEX-2_2.lib
  • IexMath-2_2.lib
  • IlmImf-2_2.lib
  • IlmImfUtil-2_2.lib
  • IlmThread-2_2.lib
  • Imath2_2。 LIB
  • openvdb.lib
  • tbb.lib
  • tbb_debug.lib
  • tbb_preview.lib
  • tbb_preview_debug.lib
  • tbbmalloc.lib
  • tbbmalloc_debug.lib
  • tbbproxy.lib
  • zlibstaticd.lib

我似乎无法找到任何信息用Visual Studio中的OpenVDB进行编译,涵盖了这种错误,并且对于我可能会遗忘的东西非常难过。

回答

1

这竟然是一对夫妇的组合问题:

  1. 我OpenVDB二进制文件与OPENVDB_3_ABI_COMPATIBLE编译定义的,因此使用的shared_ptr而不是性病版本的提升版本,但我hadn”在试图构建我的项目时定义了OPENVDB_3_ABI_COMPATIBLE,所以它试图使用std版本来构建;因此,未定义的外部。
  2. 我还没有定义OPENEXR_DLL和HALF_EXPORTS,这在我用这些库进行构建时显然是需要的。
  3. 我是用/ MT选项,而不是使用half.lib

中端/ MDD选项编译,所有我需要做的是确定OPENEXR_DLL,HALF_EXPORTS和OPENVDB_3_ABI_COMPATIBLE,并切换构建选项/ MDd。