Unresolved externals when building c++ wrapper for a pre-developed library that uses boost

时间:2017-11-08 21:59:59

标签: c++ boost c++-cli wrapper point-cloud-library

I wrote a library that uses PCL and boost in C++. It is building perfectly. When I tried to make a wrapper for it using C++/CLR I got a lot of unresolved errors. Firstly, why Visual Studio is re-building my library again when building the wrapper? Secondly, why I got the following unresolved errors?:

Error   LNK2005 "protected: virtual void __cdecl pcl::Grabber::signalsChanged(void)" (?signalsChanged@Grabber@pcl@@MEAAXXZ) already defined in pcl_io_debug.lib(pcl_io_debug.dll)
Error   LNK2005 "protected: virtual void __cdecl pcl::Grabber::signalsChanged(void)" (?signalsChanged@Grabber@pcl@@MEAAXXZ) already defined in pcl_io_debug.lib(pcl_io_debug.dll)
Error   LNK2001 unresolved external symbol "public: virtual void __cdecl pcl::visualization::PCLVisualizer::FPSCallback::Execute(class vtkObject *,unsigned long,void *)" (?Execute@FPSCallback@PCLVisualizer@visualization@pcl@@UEAAXPEAVvtkObject@@KPEAX@Z)
Error   LNK2019 unresolved external symbol deflate referenced in function "protected: int __cdecl boost::iostreams::detail::zlib_base::xdeflate(int)" (?xdeflate@zlib_base@detail@iostreams@boost@@IEAAHH@Z)
Error   LNK2019 unresolved external symbol deflateEnd referenced in function "protected: void __cdecl boost::iostreams::detail::zlib_base::reset(bool,bool)" (?reset@zlib_base@detail@iostreams@boost@@IEAAX_N0@Z)
Error   LNK2019 unresolved external symbol inflate referenced in function "protected: int __cdecl boost::iostreams::detail::zlib_base::xinflate(int)" (?xinflate@zlib_base@detail@iostreams@boost@@IEAAHH@Z)
Error   LNK2019 unresolved external symbol inflateEnd referenced in function "protected: void __cdecl boost::iostreams::detail::zlib_base::reset(bool,bool)" (?reset@zlib_base@detail@iostreams@boost@@IEAAX_N0@Z)
Error   LNK2019 unresolved external symbol deflateReset referenced in function "protected: void __cdecl boost::iostreams::detail::zlib_base::reset(bool,bool)" (?reset@zlib_base@detail@iostreams@boost@@IEAAX_N0@Z)
Error   LNK2019 unresolved external symbol inflateReset referenced in function "protected: void __cdecl boost::iostreams::detail::zlib_base::reset(bool,bool)" (?reset@zlib_base@detail@iostreams@boost@@IEAAX_N0@Z)
Error   LNK2019 unresolved external symbol crc32 referenced in function "protected: void __cdecl boost::iostreams::detail::zlib_base::after(char const * &,char * &,bool)" (?after@zlib_base@detail@iostreams@boost@@IEAAXAEAPEBDAEAPEAD_N@Z)
Error   LNK2019 unresolved external symbol deflateInit2_ referenced in function "private: void __cdecl boost::iostreams::detail::zlib_base::do_init(struct boost::iostreams::zlib_params const &,bool,void * (__cdecl*)(void *,unsigned int,unsigned int),void (__cdecl*)(void *,void *),void *)" (?do_init@zlib_base@detail@iostreams@boost@@AEAAXAEBUzlib_params@34@_NP6APEAXPEAXII@ZP6AX22@Z2@Z)
Error   LNK2019 unresolved external symbol inflateInit2_ referenced in function "private: void __cdecl boost::iostreams::detail::zlib_base::do_init(struct boost::iostreams::zlib_params const &,bool,void * (__cdecl*)(void *,unsigned int,unsigned int),void (__cdecl*)(void *,void *),void *)" (?do_init@zlib_base@detail@iostreams@boost@@AEAAXAEBUzlib_params@34@_NP6APEAXPEAXII@ZP6AX22@Z2@Z)

2 个答案:

答案 0 :(得分:1)

C ++ - CLI是一种不同的语言;它编译成一个完全不同的目标(某些.NET运行时版本/体系结构),这也是它再次构建的原因以及为什么需要为这些目标配置配置链接依赖性。

我个人将所有本机依赖项保留在本机DLL中,并在混合模式程序集中实现一个窄接口。这样,您可以将混合模式程序集的依赖关系概括为捆绑任何其他本机依赖关系的一个本机DLL。

答案 1 :(得分:0)

实际上我刚刚使用了BOOST_IOSTREAMS_NO_LIB,这解决了大部分问题。 所以在我看来,windows中的bzip2过滤器存在问题,因为它应该在默认情况下被禁用,并且主要禁用它们。 对于与可视化工具相关的其他问题,我找到了答案here