当前位置:首页 » 操作系统 » mingw源码

mingw源码

发布时间: 2022-09-19 18:20:13

Ⅰ minGW的gdb调试,list命令显示出来的源代码不换行,

Windows的换行是\r\n,Unix的换行是\n,你查看一下txt的配置是否正确。

Ⅱ MinGW的QT怎么调用VC生成的静态链接库

Qt如何调用VC++生成的动态链接库?假设当前有VC++编译器生成的动态库文件testdll.h,testdll.lib和testdll.dll。

testdll.h文件源码如下:

#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
// 此类是从 testdll.dll 导出的
class TESTDLL_API Ctestdll {
public:
Ctestdll(void);
public:
int Add(int a, int b) {return a+b;}
int Sub(int a, int b) {return a-b;}
int Mul(int a, int b) {return a*b;}
};
extern TESTDLL_API int ntestdll;
TESTDLL_API int fntestdll(void);

Qt如何使用这些动态链接库文件?

一、情况1,编程环境是Qt Creator+Qt libraries 4.8.6 for Windows (VS 2010)

Qt库是VS2010版本,VC++编译器生成的。所以工程可以直接使用testdll.h头文件和testdll.lib引入库文件。

1、把testdll.h拷贝到工程路径;

2、工程文件XXX.pro需要手动添加"HEADERS += testdll.h"和"LIBS += testdll.lib";

3、编译前,需要把lib文件:testdll.lib和testdll.dll一起拷贝到构建路径下面。

如此便可以正常使用VC++动态链接库函数。

二、情况2,编程环境是Qt Creator+Qt libraries 4.8.6 for Windows (MinGW 4.8.2)

Qt库是MinGW版本,gcc编译器生成,与VC++编译器不是同个体系。所以工程不可以使用testdll.h头文件和testdll.lib引入库文件。

对于调用DLL的方法,Qt本身就有相应的类来实现。

#include "dialog.h"
#include <QApplication>
#include <QLibrary>

typedef int (*func_Add)(int a, int b); //定义函数指针
typedef int (*func_Sub)(int a, int b);
typedef int (*func_Mul)(int a, int b);

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QLibrary mylib("testdll.dll");//testdll.dll的存放路径与.exe一致
if (mylib.load())
{
//"?Add@Ctestdll@@QAEHHH@Z"等字符串其实就是动态库函数int Add(int a, int b)的变体,请使用微软工具DEPENDS.EXE查看得到
func_Add f1 = (func_Add)mylib.resolve("?Add@Ctestdll@@QAEHHH@Z");
func_Sub f2 = (func_Sub)mylib.resolve("?Sub@Ctestdll@@QAEHHH@Z");
func_Mul f3 = (func_Mul)mylib.resolve("?Mul@Ctestdll@@QAEHHH@Z");
int rt = 0;

if (f1 != NULL)
{
rt = f1(10, 12);
}

if (f2 != NULL)
{
rt = f2(10, 12);
}

if (f3 != NULL)
{
rt = f3(10, 12);
}
}

Dialog w;
w.show();

return a.exec();
}

Ⅲ cygwin和mingw的区别

Unix下编译通过的C代码,在win32下编译是不能通过的 ,当然Unix 和win32的API都是符合标准C,也就是说,大多数函数调用在unix和win32下是相同的.但是,unix有自己一些独特的API(如fork,spawn,signals,select,sockets等),如果代码中使用了这些API,在win32下当然找不到对应的库.
但是,这些API的功能在win32中也能实现,也许你已经发现了一个能让window编译Unix风格代码的方法:
1.修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式--这就是mingw的做法.
2.修改库,让window提供一个类似unix提供的库,他们对程序的接口如同unix一样,而这些库,当然是由win32的API实现的--这就是cygwin的做法.

MinGW相比CygWin/gcc来讲,更加贴近win32。因为它几乎支持所有的Win32API。它所连接的程序,不需要任何第三方库即可运行。
CygWin/gcc,其实这是两个东西。CygWin是一个让Windows拥有Unix-like环境的软件。而gcc就是安装在CygWin上的编译器。
CygWin/gcc与MinGW的最大区别在于:使用CygWin/gcc可以在Windows下调用unix-like的API,(如fork,spawn,signals,select,sockets等)。也就是说Cygwin是运行在Windows下的,但是她使用的是Unix-like系统的函数和思想。由于这个区别,导致的结果就是用CygWin/gcc编译出来的程序可以无缝的运行在*nix环境下。但是如果调用了unix特有的API函数,在windows环境下不能正常运行,如果想在windows下正常运行的,就必须依赖cygwin1.dll,速度上会有些影响。
而用MinGW编译出来的程序,如果源代码里面调用了unix环境的API,则MinGW会把这些对UNIX的API调用翻译成win32下等价的形式。同时这个程序是不能在windows下运行的。
说白了,如果你是想在windows环境下开发linux运行程序,那么CygWin/gcc是你的不二之选。
而如果你想开发的是windows运行程序,并且追求速度,那么二者相比而言,MinGW是更好的选择

我没有用过这两个工具,只是有点想选择一个来用,于是在网上比较一下两者有啥不同,然后选一个适合自己的。过程中,我发现网上一份文章可能被多个人转载,被多个人稍微修改后当成自己的随笔写出,误认不浅。
说一点,什么cygwin编译的程序可以无缝在linux上运行,根本就不能这么理解。
cygwin官方的一个定义是Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.
翻译过来就是
cygwin不是让linux程序能在windows上运行的方法,如果你想要让linux程序能在windows运行,那么你只有用cygwin来重新编译一下源文件。
这句话完全反驳了无缝运行在linux的说法。就是说你在linux上编译的elf程序不能直接拿到cygwin上运行,同样,你用cygwin编译的程序也不是linux的elf格式,而是exe格式,exe是无法在linux上运行的。
cygwin和mingw都是为用户提供在windows操作系统使用GNU工具的方法,使得在windows上可以编译为linux写的c源代码并运行(让你可以用signal等linux才有的api)。真正的不同在于
1,cygwin大,mingw小
2,cygwin编译后的exe需要cygwin1.dll作为支持,而mingw不需要就可以直接运行,因为有中间层所以cygwin慢,mingw快。
3,cygwin包含的内容更全面,能编译通过的linux源文件更多,mingw的min是minimalist所以能编译通过的更少。但,不是全部,就是说别指望你可以把任何为linux写的源代码在cygwin或mingw编译通过并运行。

在网上找的,不知道对不对

Ⅳ Eclipse+CDT+MinGW,如何搭配glibc源码包来查看不熟悉的函数的具体实现

数组越界了 返回 的是 数组的最后一个元素 后的 不属于数组的元素 越界了

估计你想返回 整个数组 , 不要有返回这个数组这种错误的想法

你该思考 返回指向字符串的指针!

Ⅳ mingw w64源码怎么编译

应该是先安装MSYS,再安装mingw , 在mingw文件夹里面应该有个bin文件夹 ,留意一下该文件夹里面“应该”有gcc.exe的应用程序,假设该bin文件夹的全称路径是X:\..\mingw\bin,那么将它添加将它添加到环境变量里面。

Ⅵ 有一个库的源代码,怎么用mingw编译产生成lib

mingw编译出来的静态库后缀名为.a,编译出来的动态库的导入库后缀名为.dll.a,而在windows下后缀名为.lib的库可能是静态库也可能是动态库的导入库。

mingw编译出来的动态库的导入库可以直接在vc中直接使用,例如

#pragma comment(lib, "libx264.dll.a")

这样你就不需要生成一个.lib后缀的动态库的导入库了,网上也有如何从.dll生成.lib的方法。

如果链接了动态库的导入库libpthread.dll.a,你发布的应用程序就要带上pthread的dll。
使用静态库的好处是发布的应用程序组件模块里不需要带上相关的dll,如果要使用mingw编译出来的静态库,可以如下:

#pragma comment(lib, "libx264.a")

但是仅仅链接这么一个静态库是不够的,你还需要链接

libgcc.a

libmingwex.a

Ⅶ 关于mingw

MinGWStudio完整安装后有78M大小比起Vc6+DDK要小很多,而且MinGWStudio安装目录下的MinGW\include\ddk\目录里有一个叫ntapi.h的头文件,里面包括了很多未公开的函数原型及数据结构,感觉很爽啊!还有一个更爽的地方呢!那就是MinGW可以混用Windows XP SDK和DDK头文件却不会出现任何错误,在VC6中只能用namespace来解决这个问题,但MinGW里直接include头文件就行了,用户态程序可以使用用户态可用的未公开函数,记得引入ntdll.a库文件.

精简的IDE,简单的代码完成功能,没有向导,纯手工写代码.怎么看怎么觉得这东西适合Eva,呵呵!

用QuickSys向导了一个空的驱动框架HelloDrv,只改了一行代码:
#include "ntddk.h"
改成
#include "ddk\ntddk.h"

就可以毫不费力的用gcc编译成KMD
D:\wjj\vcwork\hellodrv>gcc -o HelloDrv.obj -O3 -c HelloDrv.c

D:\wjj\vcwork\hellodrv>ld HelloDrv.obj --subsystem=native --image-base=0x10000 --file-alignment=0x1000 --section-alignment=0x1000 --entry=_DriverEntry -nostartfiles -nostdlib -L E:\MinGWStudio\MinGW\lib -l ntoskrnl -o HelloDrv.sys

由于gcc支持C99标准,可以使用动态数组以及随处定义局部变量,虽然同样是用C程序来写驱动,但其实却比VC要灵活很多.另外gcc的代码优化能力相信不用我多说.

没有想到脱离Visual Studio也可以写SDK和DDK程序.开源组织里真的有很多好东东啊!gcc包里的Pascal编译器gpc可以支持Object Pascal,支持AT&T Inline Asm,支持直接使用MMX/SSE/SSE2数据类型及指令,写游戏都没有问题.比起Delphi的编译器dcc32真的是要强到哪里去了,只是没有人知道.
努力......

Ⅷ 怎样在MinGW上下载siesta

在MinGW上下载siesta操作方法

下载地址

链接:https://pan..com/s/1Sg3zC7n_scaY99avGLiMEg


提取码:kii0

第一步获取源码

从Siesta官网下载最新版本的Siesta源码: https://departments.icmab.es/leem/siesta/。或者使用命令行下载工具curl或者wget来下载:

wget -c -O ${HOME}/softwares/siesta-4.1-b4.tar.gz https://launchpad.net/siesta/4.1/4.1-b4/+download/siesta-4.1-b4.tar.gz

第二步配置翻译并安装

进入代码根目录,下的Obj文件夹:

cd siesta-4.1-b4/Obj

然后执行以下命令:

bash ../Src/obj_setup.sh

这将在执行Siesta的一个脚本来在当前路径下产生构建配置文件,此时需要修改arch.make文件中的一些参数。

需要修改指定的变量如下:

.SUFFIXES:.SUFFIXES: .f .F .o .c .a .f90 .F90SIESTA_ARCH =x86_64-unknown-linux-gnu--unknownCC = gccFPP = $(FC) -E -P -x cFC = mpif90 #gfortran# FC_SERIAL = gfortranFFLAGS = -O2 -fPIC -ftree-vectorize# FFLAGS=-gAR = arRANLIB = ranlibSYS = nagSP_KIND = 4DP_KIND = 8KINDS = $(SP_KIND) $(DP_KIND)LDFLAGS =COMP_LIBS = libsiestaLAPACK.a libsiestaBLAS.aFPPFLAGS = $(DEFS_PREFIX)-DFC_HAVE_ABORT# Dependency rules ---------FFLAGS_DEBUG = -g -O # your appropriate flags here...# added by EmuLab# For GNU compiler# the siesta guide tell me to add the FFLAGS and LIBS parameter below, but it get thing wrong,# after comment them i succeeded in the compilation!# FFLAGS += -fopenmp# LIBS += -fopenmp# OpenBLAS + LAPACK:# OpenBLAS (OpenBLAS will default to build in LAPACK 3.6)# LIBS += -L/opt/openblas/0.2.18/lib -lopenblas# use the LAPACK and BLAS provided by SIESTA# ScaLAPACK# ScaLAPACK Only required for MPI compilation.# LIBS += -L/opt/scalapack/2.0.2/lib -lscalapack# NETCDF added by deqitangINCFLAGS += -I${HOME}/softwares/netcdf_install/includeLDFLAGS += -L${HOME}/softwares/zlib_install/lib -Wl,-rpath=${HOME}/softwares/zlib_install/libLDFLAGS += -L${HOME}/softwares/hdf5_install/lib -Wl,-rpath=${HOME}/softwares/hdf5_install/libLDFLAGS += -L${HOME}/softwares/netcdf_install/lib -Wl,-rpath=${HOME}/softwares/netcdf_install/libLIBS += -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lzCOMP_LIBS += libncdf.a libfdict.aFPPFLAGS += -DCDF -DNCDF -DNCDF_4#DUMMY_FOX = --enable-mmy# For netCDF support. Make sure you get a version compatible# with the other options (for example, 32/64 bit). Don't forget# to set -DCDF below.NETCDF_ROOT= ${HOME}/softwares/netcdf_installNETCDF_LIBS= -L$(NETCDF_ROOT)/lib -lnetcdffNETCDF_INCFLAGS= -I$(NETCDF_ROOT)/include# HDF-5.HDF5_ROOT= ${HOME}/softwares/hdf5_installHDF5_LIBS = -I$(HDF5_ROOT)/include# endCOMP_LIBS += libfdict.aLIBS = $(COMP_LIBS) $(NETCDF_LIBS)#SIESTA needs an F90 interface to MPI#This will give you SIESTA's own implementation#If your compiler vendor offers an alternative, you may change#to it here.# MPI_INTERFACE=libmpi_f90.a#MPI_INCLUDE=${HOME}/softwares/openmpi_install/include# end by deqitang@# The atom.f code is very vulnerable. Particularly the Intel compiler# will make an erroneous compilation of atom.f with high optimization# levels.atom.o: atom.F $(FC) -c $(FFLAGS_DEBUG) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_fixed_F) $<.c.o: $(CC) -c $(CFLAGS) $(INCFLAGS) $(CPPFLAGS) $<.F.o: $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_fixed_F) $<.F90.o: $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_free_F90) $<.f.o: $(FC) -c $(FFLAGS) $(INCFLAGS) $(FCFLAGS_fixed_f) $<.f90.o: $(FC) -c $(FFLAGS) $(INCFLAGS) $(FCFLAGS_free_f90) $<

然后执行make构建siesta:

make siesta

构建完siesta后,如果你需要构建transiesta,需执行:

make cleanmake transiesta

还有一个常用的工具是tbtrans,其位于SIesta项目的./Util/TS/TBtrans目录下,通过下面命令来构建:

cd ../Util/TS/TBtransmake

注意Siesta的构建系统 没有提供make install。因此我们可以将编译的到的可执行程序移动到一个目录,然后将该路径添加到环境变量中,方便在终端中调用程序。

就此,常用的工具构建完毕。

第三步设置环境变量

在~/.bashrc文件中添加如下内容:

export PATH=$PATH:/home/xxx/softwares/siesta_bin

这里假设,我们将之前编译得到的siesta、transiesta、tbtrans程序都拷贝到了/home/xxx/softwares/siesta_bin中。

Ⅸ mingw怎么获得仿posix的环境

MinGW默认安装MSYS。通常打开的 MinGW Shell 其实 MSYS,MinGW 作为一个组件存在。
MSYS -- Minimal SYStem,是一个 Bourne Shell 解释器。
MinGW -- Minimalist GNU for Windows. 基于原生 windows 的开发环境,不是虚拟机。
以 MinGW 安装根目录为 D:/MinGW/ 为例。

1. 挂载文件系统

挂载到 MSYS 下可以方便使用,新版的 MinGW 已经默认自动挂载。
对于其他的文件夹,可以用同样的方式自动挂载。
配置文件 D:/MinGW/msys/1.0/etc/fstab ,一行一组挂载配置。"原路径 挂载位置" 的格式。
如下:

复制代码代码如下:

d:/MinGW/ /mingw

D:/ /home/jackon/d
默认只有第一行,所以只自动挂载了 MinGW。
最好在末尾留一个空行。因为,手动挂载的信息也会写入 fstab,且不会另起一行开始写。
手动挂载时需注意:

1. 所有的路径都要使用 linux 格式的 '/'

2. 挂载的目标路径使用绝对路径,且需要保证路径存在。

手动挂载过程截图如下。
第三方库安装可以从源码编译安装,也可以将编译后的可执行文件放在 D:/MinGW/msys/1.0/bin 目录下。
复制代码代码如下:
./configure --prefix=/mingw
make
make install
3. 关联 windows 下的 vim
在 D:/MinGW/msys/1.0/etc/profile 文件中 alias 一个命令指向 windows 可执行程序即可。

注意,路径中如果有空格,需要使用转义字符 '/ '。例如,关联外部的 vim

复制代码代码如下:

alias vim="/C/Program/ Files/Vim/vim73e/vim.exe"
启动 vim 后,不会使用本地的配置文件。可以将 vim 配置文件复制一份到 MSYS 的目录下。
未找到启动前修改 runtimepath 的方法 -- 尝试着挂载 或 软链接

4. 显示控制

通过修改 D:/MinGW/msys/1.0/etc/profile 可以更改配置信息,同 linux 的 profile 文件。 Jackon@windows 处控制显示文本, /u 使用本地用户名,/h 显示 host 地址。
复制代码代码如下:
export PS1='/[/033]0;$MSYSTEM:/w/007
/033[32m/]Jackon@windows /[/033[33m/w/033[0m/]
$ '

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:944
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:741
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:372