您的位置:首页 > 运维架构 > Linux

Windows系统和Linux系统中的静态链接库与动态链接库(二)

2010-12-02 23:23 435 查看
1.先对上篇补充一点Windows环境下Visual Studio 2010开发遇见的一点小问题:
每次新建一个 Visual C++ 选项先建一个“Empty Project”类型的项目的时候,项目文件目录下出现与解决方案同名的*.sdf文件和一个名为ipch的目录。这两个玩意好像不招人喜欢,除掉他们的方法很简单:Tools->Options->Text Editor->C/C++->Advanced->Disable Database,设置为True。这是一件大快人心的事情,但是发现后面建立的“Empty Project”类型的项目,在里面添加几个C文件,无法直接查看不同文件中的调用函数名的定义。
可见这样也不好,来个折中的办法:
(1)先将上面的设置改回来
(2)Tools->Options->Text Editor->C/C++->Advanced,在 Fallback Location 的属性组中,将"Always Use Fallback Location"设置为 true,将"Do Not Warn If Fallback Location Used" 设置为 true
(3)在 Fallback Location 的属性组中,将"Fallback Location"设置一个目录.(可选)
如果使用(3)设置一个目录,来存放刚才的*.sdf文件和一个名为ipch的目录;如果不设置,则放在默认的临时目录中了。"Fallback Location" 的描述就是这个意思。

2.记录一点在linux环境下开发时遇见的一些小问题:

2.1 源代码文件的中文文字符在Windows系统中正常而在Linux系统为乱码,或是Linux系统中正常而在Windows系统中未乱码问题

(1)方法一,将 /etc/sysconfig/i18n 修改如下内容后重新启动即可:
#LANG="zh_CN.UTF-8"
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030;zh_CN.GB2313:zh_CN"
SUPPORTED="zh_CN.GB18030;zh_CN;zh:en_US.UTF-8;en_US:en"
SYSFONT="lat0-sun16"
(2)方法二,修改/root/.bash_profile文件,在里面增加一行下面的内容重启即可:
export LANG=zh_CN.GB18030

2.2 如果在putty中文字符仍然为乱码,步骤如下:
(1)Window -> Appearance -> Font settings 选择宋体或新宋体
(2)如果是在linux系统中是UTF-8格式的(/etc/sysconfig/i18n 里面规定了编码格式),则 Window -> Translation -> Character set translation on received data 选择 UTF-8。
(3)如果是在linux系统中是GB2312,GBK,GB18030格式的(/etc/sysconfig/i18n 里面规定了编码格式),则 Window -> Translation -> Character set translation on received data 选择Use font encoding。
第(2)和(3)步选择其一即可,linux系统的字符集格式和putty中的字符集格式应保持一致。

2.3 文本文件格式转换的问题[2]
由于linux系统默认的格式是UTF-8,修改为GB18030格式后,这样在Windows系统中由Visual C++创建的C源文件中的中文字符可以正常显示了。但是另外一个问题又来了,就是用gcc命令直接编译这些文件无法通过,这就涉及到Windows和Linux间文本文件格式转换的问题了。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。在Windows系统下的换行是两个字符:回车(/r)和换行(/n),但在Linux系统下,就只有一个换行(/n)。

方法一:有两个命令可以进行格式转换:unix2dos和dos2unix,命令的参数如下:
-k 保持输出文件和输入文件的日期时间戳不变
-o file 默认模式 . 将file转换,并输出到file
-n infile outfile 新模式. 转换infile, 并输出到outfile
这种方法只能解决在Windows系统中创建的文件放入到linux中使用,但是如果有一个文件,既需要在Windows系统中使用也需要在Linux中使用,命令就是徒劳的了。因为你会发现在Linux下面打开的文件在的内容Windows系统下就不换行了,因为它少前面说的"/r"符号啊;同样在Windows系统正确显示的文件,在linux下面就有了一个 ^M 的符号。在Windows系统使用默认的文件格式GBK(gb2312),在Linux系统中进行一些调整。
方法二:在Vim 中通过下面的命令可以直接查看文件编码:
:set fileencoding
在vim中直接对文件编码进行转换:
set fileencodings=utf-8,gbk
set fileformats=unix,dos,mac

当然,第二种方法这只能处理单个文件,第一种可以进行批量文件的处理,请见引用[3].

2.4 “警告:文件未以空白行结束”的问题
常常出现在Windows系统的Visual C++中编译运行都正常的问题,拿到Linux系统下编译就报这个错误,解决办法很简单,加一个空白行不就得了。但是这似乎很弱智的。简单的办法见总结。

3.总结
如果跨平台的项目,文件内容显示、编译只需要一个源文件版本的解决办法如下:
(1)创建源文件,最好在Linux系统来创建和编译(unix格式)。如果是必须在Windows系统下用Visual C++创建和编译(dos格式),可以在编译通过后批量转换成unix格式。原因很简单,unix格式的源文件在Linux系统能正确显示的换行符,在Windows系统中Visual C++也可以正确显示,不影响阅读;而反过来dos格式的则不行。当然,unix格式的源文件用Windows系统的记事本确是不换行的,如果你非得

用记事本类似的软件打开,就用UtralEdit打开吧,也能正确显示。
(2)对于“文件未以空白行结束”问题,在Windows系统下用Visual C++创建的源文件,在末尾多加一行就可以了。反过来,在Linux系统下面创建的文件多一空白行,对Windows系统下的Visual C++编译不造成影响。

(3)可以将Windows系统和以Linux系统的格式统一,比如用上面提到的方法来解决,这样避免在Linux系统中查看源文件内容出现乱码。

[1]http://blog.chinaunix.net/u/29845/showart_428478.html

[2]http://blog.csdn.net/zhangyang0402/archive/2010/01/07/5153649.aspx

[3]http://www.eryi.org/blog/post/linux-dos2unix.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: