mingw编译链接库问题
‘壹’ 怎么在mingw环境下编译安装poco库
.vs编译安装的话,直接运行那些bat脚本就可以了,但MinGW肯定不行,所以需要用到MSYS
2.解压poco-1.4.6p2,比如:D:/mysdk/poco-1.4.6p2,在MSYS的命令行中输入“cd
/d/mysdk/poco-1.4.6p2”回车,就到了poco-1.4.6p2的解压目录了,具体你解压的目录路径可以根据实际情况修改;
3.configure poco-1.4.6p2
linux里面要配置编译参数,我们可以通过“./configure
--help”查看有哪些编译项。我们要使用MinGW编译poco就必须在configure时指明是MinGW,我的configure命令如下(大家根据自己的实际情况修改):
./configure --config=MinGW --shared --static --no-test --no-samples
--omit=Crypto,NetSSL_OpenSSL,Data/ODBC,Data/Mysql
简单解释:--config=MinGW表示我采用MinGW编译poco,--shared
--static表示编译生成动态库(dll)和静态库(a),omit=...表示编译时不生成这些库,因为我本机没装ssl、mysql,odbc需要lib,会影响我编译,所以我去掉了这4个库;
4.修改MinGW的编译脚本
修改poco-1.4.6p2/bulid/config/MinGW,把“SYSLIBS = -L/usr/local/lib -L/usr/lib
-liphlpapi -lws2_32 -lssl -lcrypto -lws2_32 -lgdi32”里去掉“-lssl
-lcrypto”,因为我本机没装ssl,这个库没有,会影响编译安装;
5.make编译
执行了上面的./configure
--config=......的命令后会生成一个config.make文件,然后输入“make”并回车,就开始编译安装poco了,poco编译过程会有一些提示错误,例如“poco-1.4.6p2/.../xxx.exe.exe:No
such file”,如果是的话就不用管他,继续输入make回车,他会继续往下编译,大概经过N次这样的操作后,提示“make[1]:Nothing to be
done for 'all'.”的时候就编译完了。
编译完成后,在poco-1.4.6p2/lib/MinGW/ia32/目录下就是编译出来的静态度和动态库了。
‘贰’ QT5.5 for vs2010,包含5.5的库目录QTWidgets、QTCORE、QTGUI。为什么编译会出现qt库错误求解决方案
qt5.0.2forwindows32bit(mingw4.7)是使用mingw32环境+gcc4.7编译而成的二进制动态链接库版本。qt5.0.2forwindows32bit(vs2010)是使用VS2010的配置和windowssdk7.0所提供的编译工具生成的用于VS2010的版本。其中mingw4.7版本自带了编译器。而vs2010版本必须要安装VS2010才能使用。其实没有vs只安装windowssdk也可以,不过需要一个代替vs2010的配置工具集。你C++什么水平啊?如果不是新手的话我建议你去检查一下配置项,就是qtcreator的编译环境配置是否把qt路径配置进去了。如果你是新手,我暂时劝你放弃qt,没有足够的C++功底,想用Qt很困难的。
‘叁’ MinGW怎样设置动态链接库的路径
静态库和动态库的区别
1.静态库
之所以称之为"静态库",是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。
从本质上来说,一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,静态库与汇编生成的目标文件(.o/.obj)一起链接为可执行文件。
静态库(后缀为.a/.lib)和.o文件格式相似。即很多目标文件经过压缩打包后形成的一个文件
静态库特点总结:
1. 静态库对函数库的链接是放在编译时期完成的
2. 程序在运行时与函数库再无瓜葛,移植方便,因为代码已经嵌入到程序里面了,可以直接跟着程序走,不存在对外部文件的依赖
3. 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件,会增加原本程序的空间
GCC编译、使用静态库
静态库的后缀是.a(并没有强制规定),它的产生分两步
1. 由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表
2. ar命令将很多.o转换成.a,成为静态库,从这点也可以看出来,库是很多.o文件的集合
编译好静态库文件之后,我们就可以在其他程序中使用静态库文件中的函数了
1. 只需要在使用到这些公用函数的源程序中包含这些公用函数的原型声明(include对应的头文件)
2. 然后在用gcc命令生成目标文件时指明静态库名
3. gcc将会从静态库中将公用函数连接到目标文件中
4. 注意,gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件,因此,我们在写需要连接的库时,只写名字就可以,如libhello.a的库,只写: -lhello
2.动态库
动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀lib,但其文件扩展名为.so(.dll)。例如:我们将创建的动态库名为myhello,则动态库文件名就是libmyhello.so。
使用库是重用代码的一种绝佳方式。 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程写入一次,然后从需要该功能的应用程序引用它们即可。 通过将代码放入 DLL,您节省在引用它的每个应用程序的空间,而且,您可以更新 DLL,而无需重新编译所有应用程序。
动态链接库 (DLL) 是作为共享函数库的可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。
动态链接与静态链接的不同之处在于它允许可执行模块(.dll 文件或 .exe 文件)仅包含在运行时定位 DLL 函数的可执行代码所需的信息。在静态链接中,链接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。
使用动态链接代替静态链接有若干优点。DLL 节省内存,减少交换操作,节省磁盘空间,更易于升级,提供售后支持,提供扩展 MFC 库类的机制,支持多语言程序,并使国际版本的创建轻松完成。
DLL 的类型
当您在应用程序中加载 DLL 时,可以使用两种链接方法来调用导出的 DLL 函数。这两种链接方法是加载时动态链接和运行时动态链接。
动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数了。有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。
加载时动态链接(load-time dynamic linking)
在加载时动态链接中,应用程序像调用本地函数一样对导出的 DLL 函数进行显式调用。要使用加载时动态链接,请在编译和链接应用程序时提供头文件 (.h) 和导入库文件 (.lib)。当您这样做时,链接器将向系统提供加载 DLL 所需的信息,并在加载时解析导出的 DLL 函数的位置。
运行时动态链接(run-time dynamic linking)
在运行时动态链接中,应用程序调用 LoadLibrary 函数或 LoadLibraryEx 函数以在运行时加载 DLL。成功加载 DLL 后,可以使用 GetProcAddress 函数获得要调用的导出的 DLL 函数的地址。在使用运行时动态链接时,无需使用导入库文件。
‘肆’ c的编译器mingw的问题
关键是你下载的那个mingw?通常不单独下载mingw,联合ide一起下载比较好。可以选择codelite
单独下载,推荐你在sf .net上搜索TDM-GCC MinGW Compiler。
如果你只是想用C语言,对C标准支持好的,应该选择Pelles C
‘伍’ 编译Qt 4.7.3在GCC 4.6 MinGW问题,怎么解决
认真核操作步骤:
1、修改环境变量工具推荐:Rapid Environment Editor
修改前请先备份前环境变量:
(1)检查系统变量path删除关mingw其版本等信息免与续mingw32-make冲突
(2)检查用户变量INCLUDE、LIB、PATH、MSDevDirMSVCDir删除关\Microsoft Visual Studio\VC98信息与续mingw32-make冲突导致编译错
2、????电脑安装mingw编译器假设路径安装C:\Qt\mingw32C:\Qt\mingw32\bin添加进环境变量path打DOS命令行输入gcc --versiong++ --versionmingw32-make --version验证编译器安装功我用MinGW版本V4.8.2
3、解压qt-everywhere-opensource-src-4.8.6.zip并进入目录例:D:\qt-everywhere-opensource-src-4.8.6\
4、依执行DOS命令:
(1)configure -debug-and-release -opensource -prefix "D:\Qt4.8.6" -platform win32-g++ -nomake demos -nomake examples
见使用选项说明:
-debug-and-release 编译debugrelease版
-opensource 选择源协议并确认
-platform win32-g++ 使用mingw编译
-prefix "D:\Qt4.8.6" 指定编译结目录,未指定则默认前
-shared 创建使用共享Qt库
-static 创建使用静态Qt库
-nomake demos -nomake examples 编译例程
-nomake tests 编译tests
-skip qtwebkit 忽略qtwebkit编译特别消耗间
-mp 使用核优化编译
(2)mingw32-make
(3)mingw32-make install
5、编译完C:\Qt\mingw32\bin\路径三文件libgcc_s_dw2-1.dll、libstdc++-6.dlllibwinpthread-1.dll拷贝D:\qt-everywhere-opensource-src-4.8.6\bin\另外请步骤1备份环境变量原
6、修改Qt安装路径
初编译选择路径D:\Qt4.8.6\想复制其盘符并且改名例:C:\Qt\4.8.6_MinGW问题问题Qt绝路径依赖症改名C:\Qt\4.8.6_MinGW\bin\exe执行程序都问题要程序打要语言发异用记事本打C:\Qt\4.8.6_MinGW\bin\qmake.exe查找关键字qt_prfxpath看面含原始安装路径我手修改qmake.exe真效解决:
C:\Qt\4.8.6_MinGW\bin\路径创建qt.conf文件内容
[paths]
Prefix = C:/Qt/4.8.6_MinGW
请注意:qt.conf文件必须ANSI格式并且Prefix斜杠风格采取Linux非Windows否则失效或者使用"Prefix = .. "任意路径效
‘陆’ MinGw的g++编译opengl程序时,链接不上,为什么
点开始菜单-->运行,输入cmd,弹出dos窗口,输入命令setpath会列出你的环境变量,看里面有没有mingw,没有的话肯定不能编译了,添加环境变量。例如你的mingw装在了D:\mingw\文件夹,那么就要在环境变量path中添加D:\mingw\;这一句。如果环境变量中本来就有mingw,那么请输入gcc或g++-V,如果没有,说明mingw确实坏了,请重新安装。如果拒绝访问的话,那么有可能有别名,比如我的系统上是gcc-3.exe,gcc-4.exe可以用来编译。怎么添加环境变量?不细写了,网络一下吧,因为windowsXP和win7稍有不同的。