arx程序与cgal冲突的地方,记录一下

arx本身是个dll,而且运行库是 /md,多线程,无论debug还是release都是/md,而不是/mtd
cgal编译出来的库,release版本是Mt,debug版本是MTd
感觉debug版本是MTd对arx没用,不知道这种看法对不对,实际上,release版本的arx调用cgal库很完美,一点问题没有,debug版本的arx调用cgal的库,各种问题各种冲突,最终即使是debug版本的arx,也得调用release版本的 的cgal库

libCGAL-vc80-mt-gd-4.4-I-900.lib
libCGAL_Core-vc80-mt-gd-4.4-I-900.lib
libboost_system-vc80-mt-gd-1_55.lib
libboost_thread-vc80-mt-gd-1_55.lib
libboost_date_time-vc80-mt-gd-1_55.lib
LIBCMT.lib
libcpmt.lib
msvcprt.lib
msvcrt.lib
msvcprt.lib
msvcprtd.lib
LIBCMT.lib
1>libCGAL-vc80-mt-gd-4.4-I-900.lib(all_files.obj) : error LNK2019: 无法解析的外部符号 "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z),该符号在函数 "public: static class std::basic_string<char,struct std::char_traits>,class std::allocator<char> > __cdecl boost::detail::lexical_cast_do_cast<class std::basic_string std::char_traits>,class std::allocator<char> >,int>::lexical_cast_impl(int const &)" (?lexical_cast_impl@?$lexical_cast_do_cast@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@detail@boost@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABH@Z) 中被引用
1>libCGAL-vc80-mt-gd-4.4-I-900.lib(all_files.obj) : error LNK2019: 无法解析的外部符号 "__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),该符号在函数 "public: __thiscall boost::thread_specific_ptr<int>::~thread_specific_ptr<int>(void)" (??1?$thread_specific_ptr@H@boost@@QAE@XZ) 中被引用


CGAL依赖gmp,mprf库(exe安装版自带动态库,zip需要手动编译),boost库(手动下载编译),使用cmake编译

1.下载boost库

2.双击boosttrap生成b2.exe

3.cmd命令到b2.exe的文件夹。输入 b2.exe --with-system --with-thread (只需要编译 system和thread)。

4.下载并打开CGAL

5.为CGAL配置所需的boost的环境变量

BOOST_ROOT:D:\ProgramFiles\boost_1_59_0 (示例,包含bootstrap.bat的文件夹)

BOOST_LIBRARYDIR:D:\ProgramFiles\boost_1_59_0\stage\lib (重启更新环境变量)

6.新建一个输出文件夹。打开cmake-gui,第一个填源码路径(CAGL文件夹根目录),第二个填输出文件夹。点configure,选择编译器,读取编译信息,默认编译dll,可去掉SHARED的勾选,编译静态。

7.点击Generate,vs环境下,输出文件夹会出现sln,打开后编译CGAL项目可得到dll或lib

CGAL的调用,直接上图:

库目录
在这里插入图片描述

链接器目录
在这里插入图片描述

arx程序与cgal冲突的地方,记录一下_第1张图片

注意:使用CGAL好像必须要release编译,debug编译出现错误。和CGAL引用的库有关,在C/C+±代码生成-运行库 这一项上出现不匹配的报错。即使修改正确,编译可通过,调用了CGAL库的算法也无法使用。报Cx00000005致命错误。时间关系,没有多加研究,有解决办法或了解原因欢迎指教。
————————————————
这是别人的
原文链接:https://blog.csdn.net/qq_29377179/article/details/102775946

你可能感兴趣的:(Cgal,c++)