LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1228|回复: 7

关于GCC源码在win32和linux平台兼容问题![基本上解决]

[复制链接]
发表于 2007-4-24 22:09:24 | 显示全部楼层 |阅读模式
我这是第一次在linux和win32写跨平台的东西,我现在做的算一个很小的例子。
在linux下使用的是gcc 4.x版本,
在win32使用的是mingw, gcc 3.x版本。
源代码使用我写的Makefile进行自动管理。
我在linux下使用的是en_US.utf8编码,考虑到要跨平台使用的程序(其实我也了不想这样,主要是论文是一个小项目,不然我也不在win32下写控制台程序呢?win32下的控制台程序没法与linux下比。显示效果不说,使用起来也较不方便),我源代码使用的是utf8字符编码,在win32下用vim阅读代码都完全正常。
先将unix文件在win32下直接make,执行起来后显示界面完全乱码。于是在linux下,用dos2unix将所有源代码全转换成dos文件后,再次编译仍有问题。又用win32下Code::Blocks做了一个工程,将原有代码导入进来,这才编码基本上没有问题了。
可是在一些地方显示仍会乱码。我有用文件保存数据,在linux下输入的数据,在win32下显示也是乱码。
请各位支支招,如何解决呢?
在整个程序中,没有用到与系统相关的函数库,在win32下编译没有任何问题。执行确会退出,真是... 又得在win32下调试,真是麻烦啊,大家有没有好办法呢?
 楼主| 发表于 2007-4-24 22:16:14 | 显示全部楼层
补一句,我在本程序中显示信息都是用的中文,保存在文件里的数据也是中文,使用的是二进制数据存储。
回复 支持 反对

使用道具 举报

发表于 2007-4-24 22:18:08 | 显示全部楼层
这个和编译器无关。楼主在Windows中编译的时候应该把所有代码文件的编码都转换成 GBK,比如用 iconv 命令
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-24 22:22:21 | 显示全部楼层
好像在用vim写的代码,在win控制台用gcc编译后,中文都成乱码了,难道在win32下非要用M$的东西。
使用的是unix编码,cp936(gb2312)编码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-24 22:26:05 | 显示全部楼层
Post by DoDo
这个和编译器无关。楼主在Windows中编译的时候应该把所有代码文件的编码都转换成 GBK,比如用 iconv 命令


gbk, 谢谢,我试试。
不早了,明天试试,谢谢兄弟哦!
其实我用dos2unix转换过了,没有转换字符集,在它下面仍出问题。
如果再出问题,我就在win32下用codeblocks建一个工程,新建所有代码文件,再将原有代码copy进来,但估计太不明智了,应该找到问题的最佳解决办法才是上上策。
回复 支持 反对

使用道具 举报

发表于 2007-4-24 23:11:33 | 显示全部楼层
dos2unix 只是转换换行符
回复 支持 反对

使用道具 举报

发表于 2007-4-24 23:47:54 | 显示全部楼层
MinGW 下也有 GDB ,不过可能不太好用。

楼主应该按照 DoDo 说的,程序本地化的方式来做。比如把消息统一存成UTF-8编码,然后获取本地化信息,把消息通过 iconv 转成本地编码使用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-25 10:41:37 | 显示全部楼层
谢谢各位的解答。
我的程序一般在linux编辑,也拿到win32修改过,所以有些文件编码类型是utf8,有些文件编码类型是ANSI(记事本中打开阅读是ANSI, vim打开是cp936, 我觉得得是gb2312编码),所以导致我程序某些页面乱码了(我的程序是类似分页显示的东西)。
还有,在win32下保存的utf8编码文件,在linux下阅读时会加上文件头<fexx>标记,"xx"这两字我不太记得了,反正就是在用gcc编译时,如果出现'\xxx'的错误时(详细错误不太记得了),打开这份源码文件看看,看是否有那个标记。
以后再慢慢观察,看看能否用其它方法解决这种linux和win32跨平台程序的办法。
现在有一个办法可以解决,在c中所以源码都使用英文编写,注释也全使用英文(国际化嘛),从配置文件读取界面语言,不过好像有点大才小用的感觉。

还有,在linux下,我程序运行的很好。在win32确会有些问题,真是有些搞不懂它了,我又把有问题的函数在win32下重新用另一种方法编写了一次。我有几次在win32下测试我的程序时,我没有要求它退出,它确自动退出了。这肯定是异常退出,因为我程序流程不是这样的,在linux下,同样的程序都没有问题。当我又来找这个自动退出的详细代码时,它确再不出问题了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表