C ++使用两个不兼容的库,有哪些选项?

时间:2014-10-08 21:35:26

标签: c++ dependencies libraries point-cloud-library cgal

我使用点云库(PCL)编写了一个程序。现在我想使用一些cgal的算法。我设法隔离地构建一个cgal类(所有依赖项工作等)但是当我尝试组合这两个项目时,我得到了未解决的外部符号错误

那么,从我的PCL项目中构建cgal项目并以某种方式访问​​它有什么选择?我将一个简单的向量传递给cgal项目,所以理论上没有一个专业图书馆必须互相交流。 我已经尝试将它构建到静态和动态库中,但据我所知,当我这样做时,我仍然需要包含所有cgal依赖项 - 这会再次破坏它。

有关未解决的外部信息的更多信息:

我使用这个CGAL example创建了一个简单的项目(VS2010),使用CMAKE:CGAL组件(包括QT),TAUCS,LAPACK,BLAS添加所需的依赖项。该项目建设愉快。如果我添加对PCL库的引用:

include_directories (${PCL_INCLUDE_DIRS})
link_directories    (${PCL_LIBRARY_DIRS} )
add_definitions     (${PCL_DEFINITIONS})

现在,当我尝试构建时,我得到了四个未解析的外部:

poisson.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void * __cdecl boost::detail::get_tss_data(void const *)" (__imp_?get_tss_data@detail@boost@@YAPAXPBX@Z) referenced in function "public: class CGAL::Lazy<class CGAL::Point_3<struct CGAL::Simple_cartesian<class CGAL::Interval_nt<0> > >,class CGAL::Point_3<struct CGAL::Simple_cartesian<class CGAL::Gmpq> >,class CGAL::Gmpq,class CGAL::Cartesian_converter<struct CGAL::Simple_cartesian<class CGAL::Gmpq>,struct CGAL::Simple_cartesian<class CGAL::Interval_nt<0> >,struct CGAL::NT_converter<class CGAL::Gmpq,class CGAL::Interval_nt<0> > > > * __thiscall boost::thread_specific_ptr<class CGAL::Lazy<class CGAL::Point_3<struct CGAL::Simple_cartesian<class CGAL::Interval_nt<0> > >,class CGAL::Point_3<struct CGAL::Simple_cartesian<class CGAL::Gmpq> >,class CGAL::Gmpq,class CGAL::Cartesian_converter<struct CGAL::Simple_cartesian<class CGAL::Gmpq>,struct CGAL::Simple_cartesian<class CGAL::Interval_nt<0> >,struct CGAL::NT_converter<class CGAL::Gmpq,class CGAL::Interval_nt<0> > > > >::get(void)const " (?get@?$thread_specific_ptr@V?$Lazy@V?$Point_3@U?$Simple_cartesian@V?$Interval_nt@$0A@@CGAL@@@CGAL@@@CGAL@@V?$Point_3@U?$Simple_cartesian@VGmpq@CGAL@@@CGAL@@@2@VGmpq@2@V?$Cartesian_converter@U?$Simple_cartesian@VGmpq@CGAL@@@CGAL@@U?$Simple_cartesian@V?$Interval_nt@$0A@@CGAL@@@2@U?$NT_converter@VGmpq@CGAL@@V?$Interval_nt@$0A@@2@@2@@2@@CGAL@@@boost@@QBEPAV?$Lazy@V?$Point_3@U?$Simple_cartesian@V?$Interval_nt@$0A@@CGAL@@@CGAL@@@CGAL@@V?$Point_3@U?$Simple_cartesian@VGmpq@CGAL@@@CGAL@@@2@VGmpq@2@V?$Cartesian_converter@U?$Simple_cartesian@VGmpq@CGAL@@@CGAL@@U?$Simple_cartesian@V?$Interval_nt@$0A@@CGAL@@@2@U?$NT_converter@VGmpq@CGAL@@V?$Interval_nt@$0A@@2@@2@@2@@CGAL@@XZ)
poisson.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl boost::detail::set_tss_data(void const *,class boost::shared_ptr<struct boost::detail::tss_cleanup_function>,void *,bool)" (__imp_?set_tss_data@detail@boost@@YAXPBXV?$shared_ptr@Utss_cleanup_function@detail@boost@@@2@PAX_N@Z) referenced in function "public: void __thiscall boost::thread_specific_ptr<class CGAL::Lazy<class CGAL::Point_3<struct CGAL::Simple_cartesian<class CGAL::Interval_nt<0> > >,class CGAL::Point_3<struct CGAL::Simple_cartesian<class CGAL::Gmpq> >,class CGAL::Gmpq,class CGAL::Cartesian_converter<struct CGAL::Simple_cartesian<class CGAL::Gmpq>,struct CGAL::Simple_cartesian<class CGAL::Interval_nt<0> >,struct CGAL::NT_converter<class CGAL::Gmpq,class CGAL::Interval_nt<0> > > > >::reset(class CGAL::Lazy<class CGAL::Point_3<struct CGAL::Simple_cartesian<class CGAL::Interval_nt<0> > >,class CGAL::Point_3<struct CGAL::Simple_cartesian<class CGAL::Gmpq> >,class CGAL::Gmpq,class CGAL::Cartesian_converter<struct CGAL::Simple_cartesian<class CGAL::Gmpq>,struct CGAL::Simple_cartesian<class CGAL::Interval_nt<0> >,struct CGAL::NT_converter<class CGAL::Gmpq,class CGAL::Interval_nt<0> > > > *)" (?reset@?$thread_specific_ptr@V?$Lazy@V?$Point_3@U?$Simple_cartesian@V?$Interval_nt@$0A@@CGAL@@@CGAL@@@CGAL@@V?$Point_3@U?$Simple_cartesian@VGmpq@CGAL@@@CGAL@@@2@VGmpq@2@V?$Cartesian_converter@U?$Simple_cartesian@VGmpq@CGAL@@@CGAL@@U?$Simple_cartesian@V?$Interval_nt@$0A@@CGAL@@@2@U?$NT_converter@VGmpq@CGAL@@V?$Interval_nt@$0A@@2@@2@@2@@CGAL@@@boost@@QAEXPAV?$Lazy@V?$Point_3@U?$Simple_cartesian@V?$Interval_nt@$0A@@CGAL@@@CGAL@@@CGAL@@V?$Point_3@U?$Simple_cartesian@VGmpq@CGAL@@@CGAL@@@2@VGmpq@2@V?$Cartesian_converter@U?$Simple_cartesian@VGmpq@CGAL@@@CGAL@@U?$Simple_cartesian@V?$Interval_nt@$0A@@CGAL@@@2@U?$NT_converter@VGmpq@CGAL@@V?$Interval_nt@$0A@@2@@2@@2@@CGAL@@@Z)
poisson.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) class boost::system::error_category const & __cdecl boost::system::system_category(void)" (__imp_?system_category@system@boost@@YAABVerror_category@12@XZ) referenced in function "public: __thiscall boost::thread_exception::thread_exception(int,char const *)" (??0thread_exception@boost@@QAE@HPBD@Z)
poisson.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (__imp_?generic_category@system@boost@@YAABVerror_category@12@XZ) referenced in function "void __cdecl boost::system::`dynamic initializer for 'posix_category''(void)" (??__Eposix_category@system@boost@@YAXXZ)

我过去能够弄清楚这些问题中的大部分问题,但这些问题引起了我的注意,因此我想知道为什么我可以创建两个相互作用但不必共享库的项目。 #39; t兼容。

1 个答案:

答案 0 :(得分:1)

OP在comment section中解决了他自己的问题。

  

我尝试了很多不同的东西,包括升级我的助推器   版本为1.55并将我的CGAL代码作为静态库引用。我有   终于设法通过重建CGAL来编译代码以使用   静态增强库(如PCL所做的那样)。