cygwin编译的win32程序不需要cygwin1.dll库的方法(3)

本文探讨了在Windows环境下使用GCC编译DLL库时遇到的挑战,特别是与vc6.0和vs2008不兼容的GCC扩展和C99特性导致的错误。通过在cygwin中使用makefile编译成功,提供了在Windows下使用GCC的解决方案。此外,解释了如何通过调整GCC编译选项和使用特定makefile来避免错误,确保DLL库在Windows环境下的正常加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我这里有一个dll库(文件系统的库)的source files使用了gcc的扩展,和C99的一些特性,使用vc6.0和vs2008编译都是一堆错误。

刚好电脑上装了cygwin,在cygwin下使用makefile能编译通过,但是在win32上调用的话,LoadLibrary都不成功,包括有的人说的用LoadLibraryEx,虽然能加载,但是在使用过程中还是有错误会发生。


在windows下只能用gcc来编译了。将linux下的makefile拷贝过来(之前已经在linux下修改过,编译过了),将gcc编译选项中的-ldl -fPIC去掉,只保留-shared,就可以了,然后make -B -f makefile_windows(为了与linux下的makefile区分开,使用-f编译makefile_windows文件),编译通过,这样就可以编译出在windows下使用的dll库文件了,LoadLibrary没有错误发生。



编译期间有遇到一个错误,不知道gcc编译器预定义了哪些宏,google了下(编译器预定义宏)

cpp -dM /dev/null


然后我只关心WIN之类的宏 cpp -dM /dev/null | grep WIN,就可以列出所有与WIN有关的宏

或者用另外一种方法,写一个简单的test.c程序

#include <stdio.h>

int main(void)
{
        printf("hello,world\n");
}


执行

gcc -dM -E test.c

就可以了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值