由mitab学到一些关于编译和运行的理解
今天上午在鼓捣一个地图绘图程序,程序写到一半,在windows下写不下去了,原因是需要引入的第三方的mitab类库进行.mif文件的读写操作,而这个类库的windows下的.lib文件和.dll文件都是在32位的机器下面编译生成的,我用的是i5的CPU的联想小Y,当然是64位的咯,也不想为写个这么小的程序装32位操作系统,于是鼓捣着在windows 64位系统下搞定这个,可能是以前的编译和运行的知识不够扎实吧,今天通过这么一倒腾倒是对几种文件有了新的理解,先来简述一下mitab这个读写地图文件的第三方类库吧,它的文件包里面有两个Makefile,一个是GNUmakefile,另一个是makefile.vc,由名字就可以看出来,分别对应Linux操作系统下面的GCC编译器和VC++编译器,首先来讲在Linux下的编译与运行过程吧,在Linux下编译的动态链接库为.so文件结尾,Linux编译mitab的动态链接库较为简单,按照文档里面说的,直接make -f GNUmakefile就会得到三个.so的文件分别是libmitab.so, libmitab.so.1和libmitab.so.1.0.1,这三个文件都是我们需要的,现在重点来了,在Linux下面,Qt Creator里面如果要使用这些API,那么步骤如下,需要在.pro工程文件中加入如下配置代码: unix: LIBS += ./libs/libmitab.so(另外两个省略),然后再设置你的LD_LIBRARY_PATH, 把包含这些.so文件的路径加进去,这可以通过在shell中通过export的方法实现,也可以在Qt Creator的Run和Build的设置中,将环境变量里的LD_LIBRARY_PATH添加该路径,将所有需要的头文件都放到一个叫做header的文件里,将mitab.h和mitab_capi.h包含进工程文件即可了,注意,在linux下面和Windows下不同,编译的时候需要使用到libmitab.so(另外两个也要,这里省略),运行时候也要。这样文件就能够顺利通过编译和运行了,为了方便,我的做法是这样子的,我建了/usr/local/lib/mitab这么一个目录,将三个链接文件放到这里面,然后配置Qt Creator的LD_LIBRARY_PATH到这里,那么一切都easy了,运行编译两不误。
再来讲讲纠结的windows 8下的mitab编译和运行吧,和Linux下不同,windows下编译的时候需要用到.lib文件,而运行的时候需要用到.dll文件,由于我电脑是64位的,而mitab根据文档描述需要用到VC++ 6.0的编译器进行编译,这肯定不行啊,已经过时了的VC++ 6.0当然是装不到64位操作系统上的咯,那咋办,于是我想了个办法,既然32位下编译的.lib文件我肯定是跑不起来的了,那有没有针对于64操作系统写的nmake编译器呢,google了半天,结果在微软社区上看到了可以在Visual studio 2010下找到nmake,而且是64位的,天啦,太棒了,于是毫不犹豫装了个Visual Studio 2010, 然后找到VC的bin目录,注意这里编译的时候一定要先配置好环境变量,这一切都是通过这个bin文件夹下面的vcvars32.bat来设置的,一定要开启一个cmd后运行,不然是无效的如果正常,到文件目录下执行nmake -f makefile.vc将得到4个.lib文件和一个mitab.dll文件。.lib文件和编译相关,在windows下Qt Creator需要设置.pro文件,加入四行如win32: LIBS += ./libs/mitab.lib(另外三个省略),这样就可以通过编译了,注意这只能通过编译,要想执行,一定要将.dll文件放到生成的.exe中去。到此,一切都结束了,可以开始干接下来的活了。
为了更好的理解.so、.lib、.dll文件,将百度到的结果放在这里,便于以后查看啦,一下是两个链接:
动态链接库->http://baike.baidu.com/view/887.htm?fr=aladdin
由mitab学到一些关于编译和运行的理解的更多相关文章
- [JAVA] 一个可以编辑、编译、运行Java简单文件的记事本java实现
本来是Java课做一个仿windows记事本的实验,后来突然脑子一热,结果就给它加了一个编译运行Java文件的功能. 本工程总共大约3000行代码,基本上把所学的java界面.文件.控件的功能都包含在 ...
- notepad++编译并运行java (自定义包)
最近用Notepad++写汇编,感觉用起来挺顺手,于是想能不能也在这个优秀的编辑器下编写java并编译运行呢,因为每次启动eclipse都要挺长时间,而且eclipse实在太占内存了... 于是各种百 ...
- 手动编译并运行Java项目的过程
现在Java开发基本上就是IDE调试,如果跨平台打个jar包过去运行一般就可以了,但是有些情况比如需要引入外部依赖的时候,这个时候是不能直接运行的,还需要引入一些外部的参数,并不是简单的javac和j ...
- 如何使用命令行编译以及运行java文件
要想编译和运行java文件,很简单,只需要两个命令: (1) javac:作用:编译java文件:使用方法: javac Hello.java ,如果不出错的话,在与Hello.java 同一目录下会 ...
- .NET程序的编译和运行
程序的编译和运行,总得来说大体是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最后在本地操作系统运行. 下图为传统代码编译运行过程: .NET的编译和运行过程与之类似,首先编写好的源代码,然 ...
- Java程序编译和运行的过程
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode) 2 ...
- Java程序编译和运行的过程【转】
转自:http://www.360doc.com/content/14/0218/23/9440338_353675002.shtml Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来 ...
- .NET概念:.NET程序编译和运行
.NET概念:.NET程序编译和运行 分类: c#程序设计 2012-02-29 15:46 3001人阅读 评论(2) 收藏 举报 .net编译器语言microsoftassemblyvb.net ...
- Xcode常见的编译、运行等错误的解决
Xcode常见的编译.运行等错误的解决 项目没找到Info.plist的错误 The solution for this particular instance of the error was “I ...
随机推荐
- .net中的TreeView的数据绑定与EasyUi_tree的数据绑定
昨天看到了.net中的TreeView,学习了一波TreeView的数据绑定,联想到EasyUi中的Tree的数据,觉得里面的逻辑差不多,就总结了一下两者的数据绑定. 前端页面和必要的JS如下 < ...
- 基于jQuery封装一个瀑布流插件
/*封装一个瀑布流插件*/ (function($){ $.fn.WaterFall = function(){ /*这是你初始化 调用这个方法的时候的 那个jquery选着到的dom对象 this* ...
- vue2 阻止时间冒泡
click.stop.prevent <div class="content-right" @click.stop.prevent="pay" > ...
- CBIR--Survey.C/GPU优化.Sys搭建
一:CBIR综述:转自于wiki:http://zh.wikipedia.org/wiki/CBIR 参考链接:http://blog.csdn.net/kezunhai/article/detail ...
- kinect:0x80080014
changed to 0x83010014 aka E_NUI_NOTCONNECTED? kinect识别问题,重启一下,就可以了.
- 【技术累积】【点】【java】【6】时间戳
闲聊 加班多诶,写博客诶. 基本 时间戳,直观理解就是时间上面盖个戳罢了,在时间这个轴上面记录个点: unix时间戳表示从开始的时间点开始,经过了多少秒: 可以简单的看做是一个计时器: 基本定义可以直 ...
- getopt函数
getopt -- 解析命令的可选项 [说明]getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下: 1.形如:cmd [-a][-b] //对短选项的解析: ...
- xshell 连接 ubuntu 16.04报错
outgoing encryption 错误 使用xshell和xftp连接 ubuntu 16.04 时出现找不到匹配的 outgoing encryption 算法的错误提示. 问题阐述: 在 ...
- 洛谷P3275 [SCOI2011]糖果_差分约束_判负环
Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; co ...
- java的基本数据类型及运算符等
基本数据类型 一.整数(整形) 值域 1. byte [-128,127] 2.short [-32768,32767] 3.int [-2147483648,2147483647] 4.long [ ...