Windows系統和Linux系統中的靜態連結庫與動態連結程式庫(二)

來源:互聯網
上載者:User

      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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.