windows下用Mingw编译库文件

来源:互联网 发布:html5动画源码怎么用 编辑:程序博客网 时间:2024/05/21 09:13

今天在研究D.Blei的CTM(correlated topic model)提供的参考代码, readme上说这个代码 需要第三方库gsl支持, 于是下载了GSL库,打算用mingw编译并安装,但是进入mingw的shell界面后,不知道这个mingw系统所在的windows目录在哪..当然也不知道如果编译安装第三方库,会装到哪里,囧。


后来,去mingw主页上查看,找到了有参考价值的网址:http://www.mingw.org/wiki/MSYS

这里介绍了如何安装第三方库。


首先把windows目录挂载到mingw系统中,如

mount c:/mingw /mingw
表示mingw装在了
c:/mingw这个路径下,之后你安装的软件就会也装在这个路径下的include和lib下
之后直接进入到下载的第三方库安装文件夹,比如我把gsl放在c:/gsl下,cd c:/gsl后,按照以下步骤安装即可
./configure --prefix=/mingwmakemake install


另外,在编译c程序时碰到了一个问题,如下:

主要还是cdt下配置的mingw的编译器找不到指定的makefile文件,于是按照以下方法配置了make的属性

make: *** No rule to make target `all'. Stop.


环境:Eclipse + CDT + Mingw

 

项目类型:C Project-->Makefile project-->Empty Project-->MinGW GCC

 

错误:

make all 
make: *** No rule to make target `all'.  Stop.

 

解决方式:右键项目-->properties-C/C++ Build-->Builder settings

               此时可看到Builder Type是不可选的,

               且Makefile generation-->Generate makefiles automatically是未选中的

               选中Generate makefiles automatically

               此时Builder Type变成了可选项,选择internal builder

               然后提交

 

执行项目,如果再出现Launch failed. Binary not found.错误,刷新下项目就好了,或者Project-->Build All


接下来,再次运行工程的build project, 发现还是有错误,不过主要的都是unresolved symbol xxx, 这类错误主要就是库文件没有指定,编译器找不到.a文件,需要对eclipse中的编译器添加第三方链接库,参看eclipse的FAQ:http://wiki.eclipse.org/CDT/User/FAQ#How_do_I_add_an_external_library_to_my_C.2B.2B_project.3F,可以对mingw的compiler目录进行指定, 添加 所需的.a文件名。 


具体配置的地方是: 工程名->右键properties->c/c++ build->settings->mingw c++ linker->libaries

在里面添加.a文件名(注意.a前面的lib要省去),因为-l已经默认加上了lib前缀。




如果出现了warning implicit declaration of function 'mkdir' 这种错误,则说明mingw的头文件声明中缺少了对mkdir的定义,在网络上查看了下,http://lists.gnu.org/archive/html/bug-gnulib/2008-04/msg00259.html, 这个网页指出了mingw中<io.h>定义的mkdir与gnu c library中定义有细微的区别, 而且mingw中的mkdir只带有一个参数, 而gnu默认的带两个参数。 

因此,需要增加包含头文件<io.h>, 同时使用mingw中只带有一个参数的mkdir函数。 即可解决问题。