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。