visual studio 2017编译Triangle库遇到的问题和解决办法
这段时间因为一个项目需要使用到Triangle这个三角剖分工具,需要在windows环境下进行对源码编译,中间踩了很多坑,特此记录下。
1、下载
下载链接是下边这个,需要*
http://www.cs.cmu.edu/~quake/triangle.html
2、编译。。超。。。级。。。麻。。。烦。。。
在ubutu下安装一切顺利,完全没遇到什么麻烦,但是换到windows下就麻烦不断,本人电脑上安装的visual studio 是2017,一开始以为是版本的问题,后来发现不是,这里对编译过程做个记录。
2.1 打开visual studio 2017 创建一个windows控制台程序
2.2 把下载的源码中的triangle.c 和triangle.h放进项目中,并且包含进来,然后把那个自动生成的同名的triangle.cpp文件删除
2.3 然后按照下边几个博客的方式,加入或者打开一些定义
https://blog.csdn.net/cuihaolong/article/details/72842026
http://www.cppblog.com/eryar/archive/2014/03/29/206394.aspx
主要就是在triangle.h 中加入
//#ifndef _TRIANGLE_HEADER_
#define _TRIANGLE_HEADER_
#ifdef _cplusplus
extern "C" {
#endif
#define REAL double
#define ANSI_DECLARATORS
#define VOID int
//#include "triangle.h"
把那两行注释掉主要是他报错,注释掉不影响编译
在triangle.c 中把#define NO_TIMER 和 #define CPU86 的注释打开,注释太多找不到就直接查找
2.4 编译成exe 从这开始就一路报错了
完成2.3 后就在右侧解决方案项目上点rebuild或者是重新生成,然后遇到了第一个错误:
在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "pch.h"”? triangle
这个一百度就能解决,参考博文
https://blog.csdn.net/testcs_dn/article/details/51460043
在项目属性里设置不使用预编译头就好了,如图
设置好了之后再rebuild, 然后我就震惊了,一串报错,不过都是什么这个函数或者变量不安全,使用什么代替,解决起来也很容易,参考博文:就是在预处理器定义那里加上_CRT_SECURE_NO_WARNINGS
https://blog.csdn.net/zhangyuehuan/article/details/12012635
确定后在rebuild,果不其然又有问题了告诉我使用了几个可能未初始化的本地指针向量
还是百度,参考这个博文把属性里边的SDL检查从是改成否,
https://blog.csdn.net/longxing525/article/details/79427460
然后在rebuild,发现编译终于成功了!!!好吧,激动的太早了=,= 然后最最最最令人震惊的事情发生了,debug 里没有编译好的.exe文件!!
然后我就怎么百度也找不到解决方案了。。。。果断不搞了,睡觉,然后第二天想了想又搜了下,看到了这个Stack Overflow 的回答
https://*.com/questions/3950509/build-succeeded-but-no-lib-file-gets-created
大概意思就是编译的输出路径有问题,所以又一次打开了项目属性页,在常规-》输出目录里选择浏览,然后选择debug文件夹
在rebuild,怀着忐忑的心情,打开了编译输入目录,终于出现了triangle.exe文件!!!激动哭了,找个poly文件测试了下
噢耶\(^o^)/,终于成功,也输出了.ele文件和.node文件,搞定!ps:如果运行结果总是helloword就是看看源文件里是不是有一个同名的triangle.cpp文件,有的话删除在rebuild就好了
2.5 编译成动态链接库.dll
打开triangle.c中的 #define TRILIBRARY 注释,保存,rebuild。不出意外,又出错了
无法解析的外部符号 _main,该符号在函数 "int __cdecl invoke_main(void)" ([email protected]@YAHXZ) 中被引用 triangle
以上编译的经验告诉我,应该还是项目属性的问题。。。于是我又打开了项目属性页,一打开就发现了一个要命的问题
目标文件扩展名和配置类型都是.exe,把他们都改成.dll,再rebuild就好了
2.6 编译成lib静态库
还是编译之前把目标文件扩展名和配置类型都改成.lib,,再rebuild就好了
到这里一切都搞定了,撒花~~~
这个故事告诉我们
1:程序有问题多问百度,谷歌,Stack Overflow,CSDN
2:别人写的已经比较成熟的程序你来运行有问题,那一定是你的问题,不是程序的问题,多从自身找原因=,=
最终编译之后的结果可以通过以下链接下载
https://download.csdn.net/download/csubai07/11952312