今天上午在鼓捣一个地图绘图程序,程序写到一半,在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文件,将百度到的结果放在这里,便于以后查看啦,一下是两个链接:

  .lib文件->http://baike.baidu.com/link?url=FyqRptRBgvwa5WZNsBQnX7SNQk5rSls_Ea6Zptl4AvQzCzkgFeGn5LVdnEPRgYSLMlCaSltZWUpVCpain0Ax3_

  动态链接库->http://baike.baidu.com/view/887.htm?fr=aladdin

  

  

由mitab学到一些关于编译和运行的理解的更多相关文章

  1. [JAVA] 一个可以编辑、编译、运行Java简单文件的记事本java实现

    本来是Java课做一个仿windows记事本的实验,后来突然脑子一热,结果就给它加了一个编译运行Java文件的功能. 本工程总共大约3000行代码,基本上把所学的java界面.文件.控件的功能都包含在 ...

  2. notepad++编译并运行java (自定义包)

    最近用Notepad++写汇编,感觉用起来挺顺手,于是想能不能也在这个优秀的编辑器下编写java并编译运行呢,因为每次启动eclipse都要挺长时间,而且eclipse实在太占内存了... 于是各种百 ...

  3. 手动编译并运行Java项目的过程

    现在Java开发基本上就是IDE调试,如果跨平台打个jar包过去运行一般就可以了,但是有些情况比如需要引入外部依赖的时候,这个时候是不能直接运行的,还需要引入一些外部的参数,并不是简单的javac和j ...

  4. 如何使用命令行编译以及运行java文件

    要想编译和运行java文件,很简单,只需要两个命令: (1) javac:作用:编译java文件:使用方法: javac Hello.java ,如果不出错的话,在与Hello.java 同一目录下会 ...

  5. .NET程序的编译和运行

    程序的编译和运行,总得来说大体是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最后在本地操作系统运行. 下图为传统代码编译运行过程: .NET的编译和运行过程与之类似,首先编写好的源代码,然 ...

  6. Java程序编译和运行的过程

    Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode)  2 ...

  7. Java程序编译和运行的过程【转】

    转自:http://www.360doc.com/content/14/0218/23/9440338_353675002.shtml Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来 ...

  8. .NET概念:.NET程序编译和运行

    .NET概念:.NET程序编译和运行 分类: c#程序设计 2012-02-29 15:46 3001人阅读 评论(2) 收藏 举报 .net编译器语言microsoftassemblyvb.net ...

  9. Xcode常见的编译、运行等错误的解决

    Xcode常见的编译.运行等错误的解决 项目没找到Info.plist的错误 The solution for this particular instance of the error was “I ...

随机推荐

  1. 如何在Linux下添加自己的驱动

    在此Linux驱动开发采用网络的方式,介绍两种驱动开发的方法:一.驱动编译到内核 1.先选择一个放置驱动代码的位置,例:drivers/char/xxx.c 2.在drivers/char/Kconf ...

  2. 集成Bmob推送

    Write By lz:  转发请注明原文地址: http://www.cnblogs.com/lizhilin2016/p/6952217.html Lz 寄语: Bmob 奇葩推送, 大坑, 想要 ...

  3. Photoshop扣除特定颜色背景

    步骤:打开ps--打开图片---选择--选择色彩范围---取样颜色(用吸管选定颜色)-- ( )再按delete键删除--点击文件--点击储存为PSD. 这样就抠除了特定范围色彩内的背景.

  4. cms初步构想

    一.cms系统的初步构想 公司正准备使用yii框架重新弄个类cms的系统: 初步的功能: 栏目文章的管理 SEO的优化功能 推荐位管理 一些思路和规则: 数据库表名的定义:通过"大模块名称+ ...

  5. jQuery,您可以实现元素的淡入淡出效果。

    fadeIn() fadeOut() fadeToggle() fadeTo() jQuery fadeIn() 用于淡入已隐藏的元素 $("button").click(func ...

  6. Java中类的定义

    成员变量:对应事物的属性 成员方法:对应事物的行为 类定义的格式 定义类:就是定义类的成员,包括成员变量和成员方法 成员变量:和以前定义变量几乎是一样的.只不过位置发生了改变.在类中,方法外. 成员方 ...

  7. Java中数组获取最大值

    最大值获取:从数组的所有元素中找出最大值. 实现思路: 定义变量,保存数组0索引上的元素 遍历数组,获取出数组中的每个元素 将遍历到的元素和保存数组0索引上值的变量进行比较 如果数组元素的值大于了变量 ...

  8. Redis详解入门篇(转载)

    Redis详解入门篇(转载) [本教程目录] 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 ...

  9. NOIP 膜你题 DAY2

    NOIp膜你题   Day2 duliu 出题人:ZAY     题解 这就是一道组合数问题鸭!!!  可是泥为什么没有推出式子!! 首先我们知道的是 m 盆花都要摆上,然后他们的顺序不定(主人公忘记 ...

  10. centos7部署openvasV9

    应特别注意,openvas更新很快,本文章仅描述了当前版本和特定环境的部署.基础环境描述如下.环境相关版本并不要求完全相同.默认阅读者有一定的Linux基础,不做赘述.本机环境: [root@linu ...