现在的位置: 首页 > 综合 > 正文

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

2012年08月19日 ⁄ 综合 ⁄ 共 3041字 ⁄ 字号 评论关闭

      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

抱歉!评论已关闭.