MathGL2.4.4 64位开发环境编译 VS2019 库文件编译错误排查(含MAC的安装说明)

MathGL2.4.4 64位开发环境编译 VS2019 库文件编译错误排查

VS2019+MathGl编译真的很磨人!!!!!!

写在前面:
1、你写的代码的开发环境决定了你用什么样的方式来编译库
比如说我的代码环境是x64的debug环境,那么最好你的库就是用x64的debug环境编译的
别乱套!!!!!
2、保证你的库的字符集和源码的字符集一致,很多都是纯字节型的字符集
3、由于我一开始就直接编译了x64的sundials库,所以本文只介绍x64的编译
前方高能

准备的环境

1、opengl编译环境(32位和64位 )
2、zlib库编译
3、pnglib库编译

1的环境准备可以参考下面的做法:
安装32位

opengl https://blog.csdn.net/lofone/article/details/103625169(安装好了glu就ok,不要继续装插件了)

安装64位

opengl https://blog.csdn.net/sixdaycoder/article/details/66975126(安装好了freeglu就 ok)

敲黑板
这里有个坑:glu版本的opengl只支持win32的,所以对于x64的编译环境并不适用,所以对于x64的开发环境必须要装x64开发环境的opengl(也就是上面的freeglu,当需要编译x64环境时,把glut.h替换成freeglu.h,这一点后面也要用的)

2和3的编译可以参考下面的做法:

https://blog.csdn.net/JinKairu/article/details/107348999

准备好了吗?扶稳坐好,mathgl编译现在开始

这里还是要参考三篇博文

https://blog.csdn.net/JinKairu/article/details/107348999
https://blog.csdn.net/vaincury/article/details/107248421
https://blog.csdn.net/vaincury/article/details/105438971

首先没商量,打开cmake,添加源文件和build文件位置
在这里插入图片描述
点击config
在这里插入图片描述
然后就是弹出很多行红字,主要的问题就是两个
1没有zlib库、2没有pnglib库,先放放,看后面的解决过程

首先保持默认的enable相关选项,不要听前面的说要选enable-mgl2,不要勾选mgl2选项,至少我是没有选的(ps:我个人认为enable选项是用来说明系统是否有相关的库支持的,在你勾选之后,cmake会要求你设置对应的库头文件和lib路径,因此没有安装的库尽量别选!!!但是有些库必须选上比如mathgl 中的opengl必须选上。关于openmp我没试过,不清楚)

然后点击Advanced选项

在这参考前面列出的博文做法,人工先指定zlib库(在这里盗图了)
在这里插入图片描述
再configer,再指定pnglib位置
在这里插入图片描述
最后configer一下,提示还是有两行错误,不重要,不影响编译

最后generate一下。

再去你刚才指定build文件夹位置的地方,双击MathGL2.sln这个文件
在这里插入图片描述
右键mgl-static生成
注意此处要选择debug还是release模式+x64或者win32
由于本人要使用sundials数据库,并且已经编译成x64架构了,所以为了一致性,我的所有库全部用x64开放环境包括zlib pnglib

前面我说到了,x64环境必须要改,opengl的库,这里我在mgl-static项目下的源文件找到了opengl.cpp,改写gl.h成freeglut.h
在这里插入图片描述

很多人会问,为什么你可以找到这个文件,你信不信我可以哭给你看。这里还是简单的说下:
一开始我是只是安装了win32的opengl环境,也就是配置了下glu。
然后我按照下面的步骤编译了MathGL,得到了库文件
最后在源码调试的时候报错说什么LINk2019错误:__imp_gl…符号无法解析,所以可以肯定是库出了问题,因为程序文件中的符号表在程序链接过程中报错;并且大概率是opengl除了问题,百度一下__imp_gl…就知道了
然后我顺着文档提醒找到使用该符号的函数,然后追踪到其文件位置,再找到头部果然是开发环境没有x64opengl,写的是gl.h,果断改成上面图片的样子了
有同学问,你这样改,我怎么知道要这样改。其实我的理解,库有对应的符号表以及代码段,一般是函数以及一些全局变量。只要你头文件符合原先作者的命名和参数类型规范就不会出问题,你甚至可以新建一个头文件写上与原先的函数一样的名称和参数类型。这里巧的是,freeglu.h完全覆盖了glu.h的内容,前面的几篇博文说到,可以只写freeglu.h不用再写glu.h glut.h等等,因此必然存在覆盖
在这里插入图片描述

然后我设定debug和x64环境
在这里插入图片描述
然后右键mgl-static生成
在这里插入图片描述
同理对release和x64环境再来一遍

这样在就在build文件下src下生成了x64环境的Debug和Release两个文件夹(主要是里面的mgl-static.lib
文件)

MathGl使用

1、常规的库使用步骤

https://blog.csdn.net/wu694128/article/details/91492386
方法1: 通过设置工程配置来添加lib库.
A、添加工程的头文件目录:工程—属性—配置属性—c/c+±–常规—附加包含目录:加上头文件存放目录。
B、添加文件引用的lib静态库路径:工程—属性—配置属性—链接器—常规—附加库目录:加上lib文件存放目录。
C 然后添加工程引用的lib文件名:工程—属性—配置属性—链接器—输入—附加依赖项:加上lib文件名。
这种方法比较繁琐,且不直观,而且还可能要争对debug版本和release版本作不同的配置,因为我们生成的两个版本的库可能放在不同的目录中的.
其他方法我没用过

2、在项目->属性->C/C+±>预处理器中添加预处理器定义_CRT_STDIO_ISO_WIDE_SPECIFIERS、MGL_STATIC_DEFINE
在这里插入图片描述
3、愉快的写代码

注意设置代码的字符集和库文件的字符集一致,不懂的百度

4、库#include文件
创建include文件夹,再穿件mgl2文件夹,包含源码的include下mgl2文件夹内头文件+build文件中include中mgl2中的三个头文件

关于MAC的安装说明

mac编译时不能勾选的openmp

如果勾选了会出现___kmpc__。。的错误,网上说明这个错误是因为openmp的原因造成的,主要与编译器相关,目前还没找到解决办法,如有人知道欢迎在评论区附上

在qtcreat界面中编写代码的时候,会使用到第三方的库,这时候库名字的编写就很重要了,不能直接写相应的文件名字,只能是除掉lib外的名字和.a或者.dylib。这里没搞明白为什么会这样,比如我的

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值