linux下编译成vs工程,GitHub - engineer1109/quark: 完善visual studio的posix c库函数。使得原来linux下的项目代码,可以直接被VS编译调试,生成...

2018-01-10

qkc项目是quark项目是一个子项目,它实现windows下的posix接口,使得linux下的c源码,可以直接在visual studio中编译,并生成本地库。该项目只在vs下有效,在linux下只有简单的重定向。

qkc和mingw、cygwin的目的是一致的,都是在windows下编译linux的c源码,生成本地可执行文件,实现linux项目到windows的迁移。c语言有悠久的历史,在linux下存在大量的优秀作品,能够将他们移植到windows下,是个不错的主意。

mingw是在windows下模拟linux,实现的是os层级的模拟器,在mingw中和linux下相似的用户体验,但它没有充分发挥windows的方便性。而qkc只是一个库,类似于libc,它实现的目标,是在vs中能够编译linux的代码。并没有任何linux的用户体验。

mingw使用的是gcc编译和gdb调试,而qkc只是vs的一个库,等价于windows下的libc库,可以充分体验vs在编译调试方便的优势。而且编写出来的源码,同样可以无缝的在linux编译。

vs在本地实现了部分c标准接口,但是每个版本都不一样,因此需要根据每个不同的vs版本号,做不同的对应。见下面vs的版本号对应表。

VS产品名称

对应版本号

发布年份

MS VC++ 14.0

_MSC_VER = 1900

(Visual Studio 2015)

MS VC++ 12.0

_MSC_VER = 1800

(VisualStudio 2013)

MS VC++ 11.0

_MSC_VER = 1700

(VisualStudio 2012)

MS VC++ 10.0

_MSC_VER = 1600

(VisualStudio 2010)

MS VC++ 9.0

_MSC_VER = 1500

(VisualStudio 2008)

MS VC++ 8.0

_MSC_VER = 1400

(VisualStudio 2005)

MS VC++ 7.1

_MSC_VER = 1310

(VisualStudio 2003)

MS VC++ 7.0

_MSC_VER = 1300

(VisualStudio .NET)

MS VC++ 6.0

_MSC_VER = 1200

(VisualStudio 98)

MS VC++ 5.0

_MSC_VER = 1100

(VisualStudio 97)

2018-02-28

经过多方尝试,在visual studio下直接实现posix c接口存在这么几个难点

1.visual studio实现的msvcr 、msvcp 、windows sdk几个项目之间的头文件,存在严重的依赖关系,分离需要很大的工作量

2.在默认情况下,visual studio会自动包含这些头文件目录,同时按照编译和链接选项,关联到不同的库文件。

3.根据生成exe和dll的选项,vs会自动加入初始化代码,并选择对应的库,而这些库就包含在默认库路径中。如果要撇开默认库,就要自己实现这些初始化代码,难度极高。

4.单独实现posix c兼容性,在现实中的使用会受到限制。毕竟在linux下,也多数是c/c++混合使用,纯粹的C代码,还是历史比较久远的代码。

经过综合考虑,还是一种折衷的方案来解决这个难题。依然使用原生的头文件和库,同时单独建立一个目录,该目录下的子目录结构和linux下一致。如果posix c的头文件在vs下没有存在,那么好办,重新实现。如果已经存在,就直接引用。最麻烦的是,该头文件已经存在,但是部分函数没有实现。则根据宏,在windows实现posix 函数。

这种方式,在编译linux源码时,会比较丑陋一点,需要根据函数是否存在,引入新的头文件。

还有一种解决方案,可以确保头文件和posix一致,但是实现要麻烦。

1.创建一个新的动态库,在工程属性中忽略默认标准包含路径设置为是,但默认库还是引入。

2.按照posix的目录结构,创建头文件,引入msvcr库中符合posix规范的函数,如果没有,那么在该库中实现。

3.c++的问题比较简单,将相关头文件拷贝过来,稍微调试一下就可以了。

任何linux的源码在vs下编译,只要保持忽略默认标准包含路径,而强制使用该动态库的头文件,就能够生成windows原生的程序。

这两个方案,都没有对vs做大规模的变动,尽最大可能的使用原生的库,所以对vs的版本依赖低,兼容性更好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值