Visual Studio调用Cygwin接口文档_20200927
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Visual studio调用Cygwin方法文档
目录
Visual studio调用Cygwin方法文档 (1)
一、引言 (4)
1.编写目的 (4)
2.设计范围 (4)
3.读者对象 (4)
4.参考资料 (4)
二、Hello World 简单实例说明 (9)
1.在Linux下创建HelloWorld 动态库 (9)
2.在Linux下调用HelloWorld动态库 (13)
3.在Windows下使用CygWin编译创建HelloWorld 动态库 (20)
4.在Windows下调用HelloWorld动态库 (25)
5.使用VS调用CygWin编译库的方法 (30)
1)准备 (30)
2)创建vs项目 (34)
3)vs项目属性设置 (38)
4)编译运行 (41)
三、原理说明................................................................... 错误!未定义书签。
1.官方回答 (5)
2.入口点 (7)
3.静态调用 (44)
1)准备 (44)
2)链接 (47)
3)编译 (49)
4)执行 (51)
5)问题 (51)
4.动态调用 (52)
1)例子 (53)
2)概念 (53)
3)结果 (54)
5.总结 (54)
一、引言
1.编写目的
本项目出发点是为了应对重庆项目金美windows版bom使用SDK为目的,在保证其整体业务接入情况下,为更好美好的明天,能让linux和windows使用一套代码开发的基础上,决定使用cygwin作为windows编译对象。如果本文档存在有写的不对或有需要进行调整的地方,都是作者在胡编乱造,以本身实际操作环境为准。
2.设计范围
本文主要介绍了cygwin和在Visual studio下调用的方法。
3.读者对象
本文档面向如下读者:
1.指定授权的本项目设计、研发、测试、实施成员;
2.指定授权的本项目组合作成员;
4.参考资料
Cygwin FAQ 见链接6.19
https:///faq.html#faq.programming.msvs-mingw
百度翻译
https:///
cygwin跨平台移植gcc+vc联合使用的方法和注意事项作者--niujin1212
https:///niujin1212/article/details/28630955
在MinGW和VS中使用cygwin1.dll 作者--雁儿在林梢
https:///u/2368094/blog/739355
Cygwin源码
https:///mirror/newlib-cygwin
平台移植- 4 (Cygwin与Win32程序的交互)
https:///larryliuqing/article/details/7431770
二、概念说明
1.官方回答
前段时间做一个把linux代码移植到vc上的工程,选择cygwin环境,直接交叉编译通过。后来为了调试方便需要把源代码全部放到vc下编译,在网上搜索相关资料,其核心是利用cygwin1.dll来模拟linux接口, 但是这样也带来了一个问题, 就是只能用Cygwin里面自带的GCC编译环境来编译程序, 不能在MinGW或VS中编译。所以便想到了在MinGW以及VS中使用cygwin1.dll,然后先看看cygwin官方的FAQ中给出了具体的方法。首先是官方的原文:
3.创建一个文件“my_crt0。c”下面的内容
# include < sys / cygwin.h >
# include < stdlib.h >
typedef int (* MainFunc) (int命令行参数个数,char * argv [], char * * env);
无效
my_crt0 (MainFunc f)
{
cygwin_crt0 (f);
}
4.在Cygwin中使用gcc构建my_crt0提示。c成DLL (如my_crt0.dll)。
按照步骤1和2生成. def和为DLL . lib文件。
5.下载crt0。从cygwin的网站,包括c 你的创意来源。修改它叫
my_crt0()代替cygwin_crt0 ()。
6.建立你的对象文件使用VC编译器cl女士。
7.链接对象文件,cygwin1。自由,my_crt0。自由(或不管你叫它)可
执行文件。
请注意,如果您正在使用任何其他Cygwin基础库你可能需要使用gcc 和构建它们作为dll 然后为女士VC生成导入库链接器。
感谢阿拉斯泰尔Growcott(阿拉斯泰尔•Growcott bakbone点有限公司这个尖点英国)。
(介似嘛破翻译….)
官方回答了一种动态调用和一种静态调用方法,下面主要介绍的是静态调用(很遗憾,动态调用没有测试成功,有调用成功的朋友敬可以写在后面)
2.入口点
接下来让我们介绍下入口点的概念,操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点由连接程序设置,不同的连接器选择的入口函数也不尽相同。在VC++下,连接器对控制台程序设置的入口函数是mainCRTStartup,mainCRTStartup 再调用main 函数;对图形用户界面(GUI)程序设置的入口函数是WinMainCRTStartup,WinMainCRTStartup 调用你自己写的WinMain 函数。具体设置哪个入口点是由连接器的“/subsystem:”选项确定的,它告诉操作系统如何运行编译生成的.EXE文件。可以指定四种方式:CONSOLE|WINDOWS|NATIVE|POSIX。如果这个选项参数的值为WINDOWS,则表