mingw dll msvc
来源:互联网 发布:中国科学院软件研究所 编辑:程序博客网 时间:2024/05/21 13:56
1. linux 和 windows 对动态库的编译连接方式不同
linux: 编译时直接去连接动态库
windows: 编译时不是连接动态库,而是连接.LIB文件,而这个.LIB文件其实只是从动态库中导出的符号表
(个人感觉windows真是多此一举,既然动态库中什么信息都有,为什么不直接连接动态库呢)
2. 跨平台编译器: mingw, cygwin
偏好mingw, 虽然不能直接支持posix,但已经有第三方的posix库了,很方便。
3. 用mingw编译dll, lib文件
dll: 用标准的gnu动态库编译方法即可,例:"gcc -shared -o hello.dll hello.c"
lib: 首先说明,用mingw生成的lib在windows下可用,但是对于VC,呵呵,不能用(windows封闭,VC更封闭,微软在搞什么啊)
(1) mingw 生成 lib文件
a) 首先用mingw自带的dlltool生成要导出的符号定义文件,如:
dlltool -z hello.def --export-all-symbols hello.o
b) 再用dlltool从动态库中导出.lib文件,如:
dlltool -k --dllname hello.dll --output-lib hello.lib --def hello.def
(2) 如何生成VC用的lib
用mingw编译出的dll库VC是可以直接用的,但是lib不行。需要调整.def和.lib的生成方法
a) .def
用上文提到的"dlltool -z hello.def --export-all-symbols hello.o",生成的.def内容类似如下:
- EXPORTS
- hello @ 1
问题就在于函数符号后面的"@ n",如果带上这个东西,在VC调用库时会出现乱序,明明调用的是函数A,
结果却进入了函数B中,原因不明,反正把这个东西去掉就行了。可以用sed命令来去除:
sed 's/ @ [0-9]*//g' hello.def
b) .lib
必须用VC自带的"lib"工具来生成,使用时将上面生成的.dll和.def文件放在相同的目录下,然后在命令行下执行
lib /machine:i386 /def:hello.def
就会生成对应的hello.lib,大功告成,VC可以编译连接lib了
例子程序:http://download.csdn.net/source/3187967
其中Makefile编译常规的Linux版本, Makefile.mingw使用mingw工具链编译windows版本
- mingw dll msvc
- mingw dll msvc
- 关于DLL,MSVC和Mingw
- MSVC 和 MinGW DLL call each other
- MSVC和MinGW的DLL工具
- MSVC和MinGW的DLL工具(Stdcall and DLL tools of MSVC and MinGW)(转帖)
- How can an MSVC program call an MinGW DLL?
- Stdcall and DLL tools of MSVC and MinGW
- [转]Stdcall and DLL tools of MSVC and MinGW
- MSVC vs. MinGW 之dll玩转攻略手记
- cmake:让mingw(gcc)生成MSVC可用的dll(.lib)
- MinGW 与 MSVC 生成 DLL 各种情况的折腾笔记
- MSVC and MinGW DLLs
- Windows MSVC vs MinGW
- MinGW与MSVC
- MinGW与MSVC
- MSVC vs. MinGW 之 (lib,dll,def,obj,exe) vs (a,dll,def,o,exe)
- MSVC vs. MinGW 之 (lib,dll,def,obj,exe) vs (a,dll,def,o,exe) 攻略
- 本地通知和推送通知编程指南
- Repeater控件中实现checkbox的全选
- php 串口+GSM Modem 发短信
- JDBC初步使用
- 监听
- mingw dll msvc
- JQuery Mobile入门——设定按钮位置
- VB.NET FTP登录类
- ibatis配置文件中 parameterClass,resultClass,resultMap 表示的意思
- vlc-android对于通过Live555接收到音视频数据包后的处理分析
- 最大公约数
- 解决 WIN7 SMTP 安装问题
- Oracle 11g新特性:索引不可见
- HNOI2006(BZOJ1191~1197)题解