一次艰难的移植,GCC与VC的感慨……

shellfish567 2009-12-31 04:11:06
不去喷口水了,刚刚完成了一次移植,只想客观的说说不同,至于喷不喷,看着办好了

我要把LINUX下的一个库移植到WINDOWS,让能够完成同样的工作,纯C编写。WINDOWS下用什么,当然是VC,可是我真的不会,新建动态链接库工程,该拷贝的拷贝进来,一编译,刷的一长串ERROR,找原因,看到的尽是int i;FILE *fp;之类的,我很苦恼?为什么?找到了,原来VC要求这些定义必须写的函数开始处,而我在LINUX下都习惯什么时候用什么时候再定义,这其一。恩,一个个都改过来吧,看吧,少了很多错误。
再者,OK了,千错万错都改过来了,编了个小程序跑起来了,说明语法之类没错了。恩,俺编DLL吧,LINUX下不用去EXPORT等等,这个下面不行,必须声明出口函数,于是,我加了,又加了一些定义,编译编译……一直错误。。。。可是明明没错,被逼无奈之下,找同事,才知道同一个工程只能做一项任务,控制台程序是编译不了DLL的,习惯性VIM编译库的时候注释掉main再编译,在这里,行不通……新建工程,再拷贝,修改修改再修改,跑过去了,DLL出来了,不说大小了,能用就开心的笑吧
恩,库是出来了,咱得做个测试程序吧?
加头文件,声明……死活出不来,因为没有用MFC去链接库,一个个去定义,一个个去找到接口找到库,也多了10多行代码了,于是,编译,成了,总算跑起来了,累啊。如果有的选择,我宁愿选择miniGW,或者QT,可是真的没的选择了,谁让是windows的呢?
...全文
586 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
z569362161 2010-01-29
  • 打赏
  • 举报
回复
这个问题我最会了。

秘密告诉你,不能让他们知道
jernymy 2010-01-02
  • 打赏
  • 举报
回复
shiweifu 2010-01-02
  • 打赏
  • 举报
回复
VC支持到C89,GCC支持C99,这跟平台有什么关系?
MFC本来就是WINDOWS下的,跨平台可以选择QT或者wxWidgets。。这好像都不是问题吧?
likee003 2010-01-02
  • 打赏
  • 举报
回复
跨平台是会遇到各种问题的,
楼主的精神值得佩服。
fire123cba 2009-12-31
  • 打赏
  • 举报
回复
我是新手,还没有有什么感想!!!只当学习了!!!!
do_fork 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 jackyjkchen 的回复:]
引用 28 楼 do_fork 的回复:
引用 27 楼 jackyjkchen 的回复:
引用 26 楼 do_fork 的回复:
引用 25 楼 jackyjkchen 的回复:
引用 23 楼 do_fork 的回复:
引用 21 楼 jackyjkchen 的回复:
楼主没考虑过cygwin?专门用于移植unix的,unix下的代码不用改一个字可以直接编译,哪怕你使用了unix的系统调用


这是不可能的事情,我随便写一段代码,cygwin都没法实现这个api

不绝对啦,linuxer不经常如此吹嘘wine么,其实真正能跑的也得看运气


用wine的,用gui的,不用vi或者emacs的,不算linuxer

这帮人声音比较大……wine的程序比Windows下跑的快……这句话我耳朵都听的磨出茧子了


纯科学计算的,如super pi,wine出来比windows跑的快是有可能的,
但是wine出来的菜单速度,一般不可能比windows快,估计至少要慢10%以上。

网上叫的最兄的所谓linuxer,
恐怕多是些袁萌这样的,喜欢拿u盘直播鲜活的ubuntu

有内幕吗,那家伙怎么看都像无间道
[/Quote]

不需要内幕,去他博客看看就一目了然了
jackyjkchen 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 do_fork 的回复:]
引用 27 楼 jackyjkchen 的回复:
引用 26 楼 do_fork 的回复:
引用 25 楼 jackyjkchen 的回复:
引用 23 楼 do_fork 的回复:
引用 21 楼 jackyjkchen 的回复:
楼主没考虑过cygwin?专门用于移植unix的,unix下的代码不用改一个字可以直接编译,哪怕你使用了unix的系统调用


这是不可能的事情,我随便写一段代码,cygwin都没法实现这个api

不绝对啦,linuxer不经常如此吹嘘wine么,其实真正能跑的也得看运气


用wine的,用gui的,不用vi或者emacs的,不算linuxer

这帮人声音比较大……wine的程序比Windows下跑的快……这句话我耳朵都听的磨出茧子了


纯科学计算的,如super pi,wine出来比windows跑的快是有可能的,
但是wine出来的菜单速度,一般不可能比windows快,估计至少要慢10%以上。

网上叫的最兄的所谓linuxer,
恐怕多是些袁萌这样的,喜欢拿u盘直播鲜活的ubuntu
[/Quote]
有内幕吗,那家伙怎么看都像无间道
do_fork 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 jackyjkchen 的回复:]
引用 26 楼 do_fork 的回复:
引用 25 楼 jackyjkchen 的回复:
引用 23 楼 do_fork 的回复:
引用 21 楼 jackyjkchen 的回复:
楼主没考虑过cygwin?专门用于移植unix的,unix下的代码不用改一个字可以直接编译,哪怕你使用了unix的系统调用


这是不可能的事情,我随便写一段代码,cygwin都没法实现这个api

不绝对啦,linuxer不经常如此吹嘘wine么,其实真正能跑的也得看运气


用wine的,用gui的,不用vi或者emacs的,不算linuxer

这帮人声音比较大……wine的程序比Windows下跑的快……这句话我耳朵都听的磨出茧子了
[/Quote]

纯科学计算的,如super pi,wine出来比windows跑的快是有可能的,
但是wine出来的菜单速度,一般不可能比windows快,估计至少要慢10%以上。

网上叫的最兄的所谓linuxer,
恐怕多是些袁萌这样的,喜欢拿u盘直播鲜活的ubuntu
jackyjkchen 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 do_fork 的回复:]
引用 25 楼 jackyjkchen 的回复:
引用 23 楼 do_fork 的回复:
引用 21 楼 jackyjkchen 的回复:
楼主没考虑过cygwin?专门用于移植unix的,unix下的代码不用改一个字可以直接编译,哪怕你使用了unix的系统调用


这是不可能的事情,我随便写一段代码,cygwin都没法实现这个api

不绝对啦,linuxer不经常如此吹嘘wine么,其实真正能跑的也得看运气


用wine的,用gui的,不用vi或者emacs的,不算linuxer
[/Quote]
这帮人声音比较大……wine的程序比Windows下跑的快……这句话我耳朵都听的磨出茧子了
do_fork 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 jackyjkchen 的回复:]
引用 23 楼 do_fork 的回复:
引用 21 楼 jackyjkchen 的回复:
楼主没考虑过cygwin?专门用于移植unix的,unix下的代码不用改一个字可以直接编译,哪怕你使用了unix的系统调用


这是不可能的事情,我随便写一段代码,cygwin都没法实现这个api

不绝对啦,linuxer不经常如此吹嘘wine么,其实真正能跑的也得看运气
[/Quote]

用wine的,用gui的,不用vi或者emacs的,不算linuxer
jackyjkchen 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 do_fork 的回复:]
引用 21 楼 jackyjkchen 的回复:
楼主没考虑过cygwin?专门用于移植unix的,unix下的代码不用改一个字可以直接编译,哪怕你使用了unix的系统调用


这是不可能的事情,我随便写一段代码,cygwin都没法实现这个api
[/Quote]
不绝对啦,linuxer不经常如此吹嘘wine么,其实真正能跑的也得看运气
caostorm 2009-12-31
  • 打赏
  • 举报
回复
“比如必须在函数开头定义这点”
VC编译的话会分C规则和C++规则分开编译,一般来说对于*.c的文件都采用C的方式进行编译,会要求严格的C语法,而对于*.cpp文件采用C++的方式进行编译,就不会对函数开头定义进行严格要求。
do_fork 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 jackyjkchen 的回复:]
楼主没考虑过cygwin?专门用于移植unix的,unix下的代码不用改一个字可以直接编译,哪怕你使用了unix的系统调用
[/Quote]

这是不可能的事情,我随便写一段代码,cygwin都没法实现这个api
东大坡居士 2009-12-31
  • 打赏
  • 举报
回复
学习~~
jackyjkchen 2009-12-31
  • 打赏
  • 举报
回复
楼主没考虑过cygwin?专门用于移植unix的,unix下的代码不用改一个字可以直接编译,哪怕你使用了unix的系统调用
hemiya 2009-12-31
  • 打赏
  • 举报
回复
统一编译器不好么.换什么vc,
windows用mingw
YeBinYe 2009-12-31
  • 打赏
  • 举报
回复
顶一个,学习了
kwer 2009-12-31
  • 打赏
  • 举报
回复
ms从来没想过做标准化的东西,简直就像是一个妖孽。
shellfish567 2009-12-31
  • 打赏
  • 举报
回复
这种感觉就像一直自由自在的像天空的小鸟(写代码可以很随意,没有太多限制),突然发觉进了深宫大院,做了后宫佳丽,条条款款像枷锁压着你必须那么做才行,MS就像那皇帝……[Quote=引用 15 楼 mstlq 的回复:]
引用 9 楼 shellfish567 的回复:
恩,确实,还好我是用纯C写的,没发生必须换函数的尴尬,就是不同编译器之间的差别性让人不好琢磨,比如必须在函数开头定义这点,没人告诉我,我看着int i干看着不知道为什么会出错。只是觉得编译动态库,调用动态库都得用MFC,这点很不友好引用 4 楼 zxw0521 的回复:
移植确实挺累的,

有些做的好的工程,在设计时,就考虑到跨平台的特性,
用不同的宏来控制不同平台的编译,

我认为这个很值得参考


“比如必须在函数开头定义这点”……
关于这一点,其实很多老版的c语言教材都有提及,一般都在比较前面的几章。

其实编译动态库或静态库都可以不用MFC的,工程设置选项那里调调就行。

怎么说呢?突然遇到一个新的环境,要迅速适应还是很麻烦的,因为很多东西都与原有习惯不符合了,楼主辛苦了……


[/Quote]
honghu069 2009-12-31
  • 打赏
  • 举报
回复
移植是一件巨痛苦的事....
加载更多回复(15)

69,383

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧