Maison  >  Article  >  Opération et maintenance  >  Mingw peut-il fonctionner sous Linux ?

Mingw peut-il fonctionner sous Linux ?

青灯夜游
青灯夜游original
2023-03-15 12:10:162099parcourir

mingw peut fonctionner sous Linux. MinGW est une collection disponible gratuitement et librement redistribuable de fichiers d'en-tête et de bibliothèques d'importation spécifiques à Windows utilisant l'ensemble d'outils GNU, qui permet aux utilisateurs de générer des programmes Windows natifs sur la plate-forme GNU/Linux sans avoir besoin d'un runtime C tiers (C Runtime ) bibliothèque.

Mingw peut-il fonctionner sous Linux ?

L'environnement d'exploitation de ce tutoriel : système linux7.3, mingw-w64, ordinateur Dell G3.

Qu'est-ce que mingw

MinGW est l'abréviation de Minimalist GNU pour Windows. Il s'agit d'une collection de fichiers d'en-tête et de bibliothèques d'importation spécifiques à Windows disponibles gratuitement et librement redistribuables à l'aide de l'ensemble d'outils GNU, vous permettant de générer des programmes Windows natifs sur les plates-formes GNU/Linux et Windows sans avoir besoin d'un runtime C tiers (C Runtime ) bibliothèque.

MinGW est un ensemble de fichiers d'inclusion et de bibliothèques de ports. Sa fonction est de permettre aux programmes en mode console d'utiliser la bibliothèque C Runtime (C Runtime) standard de Microsoft (MSVCRT.DLL). Cette bibliothèque est valable sur tous les systèmes d'exploitation NT. Versions du système d'exploitation Windows supérieures à Windows 95, en utilisant le runtime de base, vous pouvez utiliser GCC pour écrire des programmes conformes à l'American Standards Institute (ANSI) en mode console, et vous pouvez utiliser l'extension C Runtime fournie par Microsoft, avec Combiné avec le runtime de base, vous peut avoir tous les droits pour utiliser les fonctions CRT (C Runtime) et Windows API.

mingw peut-il fonctionner sous Linux ?

mingw peut fonctionner sous Linux. En prenant la série Debian comme exemple, vous pouvez interroger le package d'installation MinGW via la méthode suivante et l'installer si nécessaire.

1. Interrogez la bibliothèque d'exécution de mingw

Mingw peut-il fonctionner sous Linux ?

2. Interrogez l'environnement de développement de mingw

Mingw peut-il fonctionner sous Linux ?

3. Sélectionnez le package adapté à votre propre matériel. plate-forme à installer

Mingw peut-il fonctionner sous Linux ?

Utilisez MinGW pour compiler de manière statique libcurl avec zlib sous LinuxMingw peut-il fonctionner sous Linux ?

libcurl est une bibliothèque réseau multiplateforme, facile à utiliser et puissante. Les packages binaires compilés sont disponibles dans la plupart des distributions Linux et les systèmes Mac les utilisent comme composant principal. Mais sur la plate-forme Windows, une compilation manuelle est requise, sans compter que certaines personnes souffrant de mysophobie particulière (comme moi) détestent vraiment les DLL supplémentaires et doivent les lier statiquement. Cet article est un petit résumé de mes deux nuits d'expérience, expliquant comment utiliser MinGW pour compiler la bibliothèque statique libcurl pour Windows sous Linux. ÉTAPE 1 Installez le compilateur MinGW

Je n'entrerai pas dans les détails de cette étape. La plupart des distributions Linux devraient l'avoir dans leurs entrepôts. En prenant mon ArchLinux comme exemple, exécutez simplement :

~# pacman -S mingw-w64
. Si vous n'avez pas besoin de compilation croisée et souhaitez compiler directement sous Windows, veuillez vous rendre sur SourceForge pour télécharger la version Windows. Ne vous inquiétez pas de savoir si w64 est la version 64 bits, il peut compiler des programmes 32 bits et 64 bits. Prenons ma version comme exemple :
~# pacman -Ql mingw-w64-gcc| grep '/usr/bin/.*gcc$'
mingw-w64-gcc /usr/bin/i686-w64-mingw32-gcc
mingw-w64-gcc /usr/bin/x86_64-w64-mingw32-gcc

Vous pouvez voir qu'il y a deux gccs. Le programme compilé avec i686-w64-mingw32-gcc est en 32 bits, et x86_64-w64. -mingw32-gcc est compilé en version 64 bits. Maintenant, écrivez simplement un Hello World (vous pouvez utiliser mon code Hello World ^_^), puis essayez de le compiler :

i686-w64-mingw32-gcc hello_world.c -o hello_world.exe

Apportez-le à la machine virtuelle ou lancez-le dans Wine. S'il peut fonctionner normalement, félicitations, La première étape est terminée.

w64是不是64位版本,它既可以编译32位又可以编译64位程序。还是以我的版本为例:

$ ./Configure no-shared --cross-compile-prefix=i686-w64-mingw32- mingw
$ make

可以看到有两个gcc,用i686-w64-mingw32-gcc编译出来的程序就是32位的,而x86_64-w64-mingw32-gcc编译出来的就是64位的。现在,随便写个Hello World(你可以用我的Hello World代码 ^_^),然后编译试试:

make -f Makefile.m32 CFG=-zlib

把它拿到虚拟机或扔进Wine里,如果能正常运行,那么恭喜你,第一步完成了。

STEP2 下载源码

很简单的步骤,如果自己搞不定的建议直接右上角。

  • LibCurl:最上面的Source Archives
  • zLib:请下Source Code
  • OpenSSL:可选,如果没有必要就不要编译,会极大地增加文件体积

curl-7.35.0zlib-1.2.8(可能还有openssl-1.0.1f)这几个文件夹放在同一个目录下,然后进行下一步。

STEP3 编译源码

先打开zlib/win32文件夹下的Makefile.gcc文件,把PREFIX =这行改成STEP1里的gcc前缀,对于我来说就是PREFIX = i686-w64-mingw32-。把这个文件拷贝到zlib文件夹下,然后在zlib文件夹下make -f Makefile.gcc,你就应该能看到libz.a这个文件了。

如果你要编译OpenSSL,那么就去openssl文件夹下

make -f Makefile.m32 CFG=-zlib-ssl

即可,记得改prefix。生成libssl.alibcrypto.a

ÉTAPE 2 Téléchargez le code source 🎜🎜🎜étapes très simples, si vous n'arrivez pas à le comprendre, allez simplement en haut coin droit. 🎜
  • LibCurl : les principales archives sources
  • zLib : veuillez télécharger le code source
  • OpenSSL : facultatif, ne compilez pas si ce n'est pas nécessaire, cela augmentera considérablement Taille du fichier
🎜Comparez curl-7.35.0 et zlib-1.2.8 (et éventuellement openssl-1.0.1f) Placez ces dossiers dans le même répertoire, puis passez à l’étape suivante. 🎜🎜🎜ÉTAPE 3 Compilez le code source🎜🎜🎜Ouvrez d'abord le fichier <code>Makefile.gcc sous le dossier zlib/win32 et modifiez la ligne PREFIX = Cela devient le préfixe gcc dans STEP1, qui pour moi est PREFIX = i686-w64-mingw32-. Copiez ce fichier dans le dossier zlib, puis make -f Makefile.gcc sous le dossier zlib, et vous devriez pouvoir le voir libz.aCe fichier. 🎜🎜Si vous souhaitez compiler OpenSSL, alors allez dans le dossier openssl 🎜
for x in vtls/openssl.o vtls/gtls.o vtls/vtls.o vtls/nss.o vtls/qssl.o vtls/polarssl.o vtls/polarssl_threadlock.o vtls/axtls.o vtls/cyassl.o vtls/curl_schannel.o vtls/curl_darwinssl.o vtls/gskit.o
do
mv `basename $x` vtls
done
🎜 et pensez à changer le préfixe. Générez libssl.a et libcrypto.a🎜

最后去libcurl里的lib文件夹里修改Makefile.m32文件,在CC = $(CROSSPREFIX)gcc上加一行CROSSPREFIX=i686-w64-mingw32-(请按需修改),然后把下面CFLAGS那行改成这样CFLAGS = -g -O2 -Wall -DCURL_DISABLE_LDAP,最后

make -f Makefile.m32 CFG=-zlib

或是

make -f Makefile.m32 CFG=-zlib-ssl

make到最后时会报个错,是因为文件没放对地方,手动挪一下即可

for x in vtls/openssl.o vtls/gtls.o vtls/vtls.o vtls/nss.o vtls/qssl.o vtls/polarssl.o vtls/polarssl_threadlock.o vtls/axtls.o vtls/cyassl.o vtls/curl_schannel.o vtls/curl_darwinssl.o vtls/gskit.o
do
mv `basename $x` vtls
done

然后再make一下,libcurl.a文件应该就出现了。
如果生成dll出错也不要紧,我们要的是.a文件

STEP4 测试

现在,你可以找一段libcurl的demo来测试了。注意要加上宏定义CURL_STATICLIB

i686-w64-mingw32-gcc -I. -L. -DCURL_STATICLIB curl_demo.c -lcurl -lz -lws2_32 -o curl_demo.exe

如果你因为不知道gcc-I-L选项的用法而编译不过,请自行Google。如果你加了ssl支持,你需要链接更多的库,具体请根据错误信息自行Google。

最后提醒一点:请把-lcurl选项放在源文件后面,我当初就是因为这个死活链接不过。最后把curl_demo.exe拖进虚拟机里,如果一切正常,那么恭喜你,你成功了。

相关推荐:《Linux视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Que signifie Linux Ibus ?Article suivant:Que signifie Linux Ibus ?