最近在用WinGW(GCC的WINDOWS版本)调试跨平台的C/C++程序,在链接程序的过程中,两次写错了链接的文件,一次是将.a的后缀误写为.lib,第二次是将.a的后缀误写为.dll,当时没发现,等到一天的工作结束了,躺在床上才想起这个问题。
为什么啊?链接的文件都写错了,链接应该不能通过的,为什么调试一天的程序都一切正常呢?难道MinGW可以与LIB文件和DLL文件直接链接?
于是今天专门做了测试。令人欣喜,的确是这样的:MinGW在链接的时候,可以与.LIB文件链接,也可以与DLL文件链接。
下面是我写的pthread链接的测试程序:
//main.cpp
#include <stdio.h> #include <pthread.h>
void* _thread_t(void* param) { printf("thread_ok\n"); return NULL; }
int main() { pthread_t tid; pthread_create(&tid, NULL, _thread_t, NULL); pthread_join(tid, NULL); getchar(); return 1; } |
编译的命令如下:
g++ -o main.o -c main.cpp -g -Wall -I"e:\pthread_wiin32\include"
下面使用GCC的.a格式的文件进行链接:
g++ -o main.exe main.o "e:\pthread_win32\lib\libpthreadGC2.a"
以上的链接办法当然能链接通过。
下面尝试和windows特有的.lib格式的文件进行链接:
g++ -o main.exe main.o "e:\pthread_win32\lib\pthreadVC2.lib"
欣喜若狂,泪流满面————链接通过了。执行程序,一切正常!!!
下面再试和DLL链接:
g++ -o main.exe main.o "e:\pthread_win32\lib\pthreadVC2.dll"
又链接通过,又执行正常!!!高兴得都不知道说啥好了!!!
MinGW真是超牛啊!内部应该提供了从lib文件和从dll文件获得类型信息的功能!!!由此看来,GCC链接obj文件应该也是可以的。
不过,总还是有些遗憾。不是为MinGW遗憾,为微软而遗憾:我使用VC8.0(VS2005)编译的obj和LIB文件无法被MinGW链接,能够被MinGW链接的lib文件应该是由版本较早的VC编译器生成的。可惜,我电脑里面没装VC6,没办法测试。有兴趣的朋友如果测试了,希望能告知我结果。
伟大的开源社区,令人欣喜的GCC,如此兼容并包的功能实在让我们感动。恶心的微软,随着新版的编译器的退出,他们一定修改了obj和lib文件的原有格式,使得GCC无法获得类型信息,如此的小见如此的自私。
以前在WINDOWS下写OCI和PROC的程序,发现ORACLE的库中没有提供.a格式的链接文件,于是暗暗把ORACLE骂了一顿。而今,发现MinGW可以和lib格式的库链接,姑且就原谅ORACLE了。
呵呵,GCC让我的心情如此振奋,中午要多吃一碗饭!
分享到:
相关推荐
VSCode所需编译器MinGW的mingw64压缩包 MinGW 的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 ...
MingW64是一款针对Windows平台的GCC(GNU Compiler Collection)移植版,它为64位Windows操作系统提供了GNU工具集,包括编译器、链接器、调试器和其他开发工具。MingW64使得开发者能够在Windows环境下编译和构建遵循...
MinGW (Minimalist GNU for Windows) 是一个开源项目,它为Windows操作系统提供了GNU工具集,包括C、C++和其他编程语言的编译器和开发工具。MinGW64是其64位版本,专为在64位Windows系统上进行开发而设计。本教程将...
MinGW(Minimalist GNU for Windows)是一个开源项目,旨在为Windows操作系统提供一个GCC(GNU Compiler Collection)编译环境。MinGW8.1.0是该项目的一个版本,它包含了8.1.0版本的GCC和其他必要的工具链,允许...
MingW64是一个针对Windows平台的GCC(GNU Compiler Collection)移植版,它为C和C++等编程语言提供了编译环境。MingW64的名字来源于"Minimalist GNU for Windows",它扩展了原始的MingW项目,支持64位的Windows操作...
Mingw-w64 是一个为 Windows 平台构建的开源 GCC (GNU Compiler Collection) 工具链,它提供了原生的 Windows 编译器和运行时环境,支持 32 位和 64 位应用程序的开发。Mingw-w64 项目是对原始 Mingw(仅支持 32 位...
MinGW(Minimalist GNU for Windows)是一个开源项目,旨在为Windows操作系统提供一个GCC(GNU Compiler Collection)编译环境。MinGW 3.4.2是该项目的一个较早版本,它包含了一个精简版的GNU工具集,使得开发者能够...
【MinGW安装包】mingw-18.0.exe
MinGW(Minimalist GNU for Windows)是一个开源项目,旨在为Windows操作系统提供一个GCC(GNU Compiler Collection)编译环境。这个“MinGW全部离线包”包含了一系列必要的工具和库,使得开发者可以在Windows平台上...
MinGW(Minimalist GNU for Windows)是一个开源项目,旨在为Windows操作系统提供一个GCC(GNU Compiler Collection)编译环境。MinGW-6.3.0-1是该项目的一个版本,包含了GCC 6.3.0和其他相关工具,允许开发者在...
Mingw32 V4.9.2 是一个针对Windows操作系统编译C和C++程序的开源工具集。 Mingw,全称是“ Minimalist GNU for Windows”,它将GNU Compiler Collection (GCC) 移植到了Windows平台上,使得开发者可以在不依赖...
MinGW64是一款针对Windows平台的GCC(GNU Compiler Collection)移植版,专为64位系统设计。这个压缩包包含了开发C++程序所需的基本组件,如编译器、链接器和其他必要的工具。MinGW64的名字是“Minimalist GNU for ...
MinGW (Minimalist GNU for Windows) 是一个开源项目,它为Windows操作系统提供了GNU工具集,包括C、C++和其他编程语言的编译器和开发工具。MinGW64是MinGW的一个扩展,专为64位Windows环境设计,提供与MinGW相同的...
MinGW(Minimalist GNU for Windows)是一个开源项目,旨在为Windows操作系统提供一个GCC(GNU Compiler Collection)编译环境。这个项目使开发者可以在Windows上构建原生的GNU应用程序,而无需依赖于像Microsoft ...
MinGW,全称为 Minimalist GNU for Windows,是一个可移植的GCC(GNU Compiler Collection)环境,专为在Windows操作系统上开发C、C++等语言的应用程序而设计。它提供了头文件、库以及编译器,使得开发者能够在...
MingW,全称为 Minimalist GNU for Windows,是一个开源的、为Windows环境提供GNU工具集的集合,它使得开发者能够在Windows操作系统上使用GCC(GNU Compiler Collection)进行C、C++和其他编程语言的编译。MinGW-6.3...
3.1:MinGW 是什么? MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU ( http://www.gnu.org/ )的工具集,特别是GNU 程序开发...
MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。详情请参考<http://www.mingw.org>。 这里的“纯粹”是指「使用msvcrt.dll的应用程序」。无法使用MFC ...
描述中提到的问题是在尝试使用cmake构建项目时,发现缺少了minGW32-make.exe。cmake是一个跨平台的自动化构建系统,用于管理软件项目的构建过程。它不直接编译代码,而是生成特定构建工具(如Makefile)所需的构建...
MingW,全称为 Minimalist GNU for Windows,是一个开源的开发工具集合,用于在Windows系统上构建和编译原生的Windows应用程序。它提供了GCC(GNU Compiler Collection)等GNU工具链,使得开发者可以在Windows环境下...