Windows下程式向Linux下移植細節
【摘要】
根據zxms80專案的會議排程模組移植的經驗,本文提出了Windows平臺上程式向Linux下移植所碰到的一些典型問題,並舉例給出了相應的解決方法,文中還描述了使用pwlib庫時makefile檔案的編寫方法,該方法也適用於不使用pwlib庫開發時的一般情況,供要進行移植的同仁參考之用。
一、問題的提出
由於Linux作業系統原始碼公開是的,開發庫等輔助工具都是原始碼公開的,這樣就減少了程式的不可預知性,而且出現錯誤可以大家一起修正、完善,而Windows平臺下所有的作業系統
在程式跨平臺的移植過程中,將存在作業系統API的不同、檔名大小寫識別不同、路徑分隔符不同、不同開發平臺數據型別的不一致等較一般性的問題。對於這些一般性的問題怎樣很好的來解決呢?Linux下的工程都是使用makefile檔案來管理的,怎樣編寫出相應的makefile檔案呢?這些問題都是本文後面將要闡述的。
二、解決思路
文中還描述了使用pwlib庫時makefile檔案的編寫方法,對於使用了pwlib庫進行開發的程式能快捷的建立makefile工程檔案,避免了自己手動書寫makefile的繁雜工作。
特別是<3.2.6可以移植的資料型別>一節中對於不同開發平臺數據型別的不一致提出了一個簡捷通用的解決方法,不用修改源程式中任何程式碼即可在Linux下使用Windows開發平臺上的一些資料型別。
三、實踐情況
3.1.Makefile的編寫
具體makefile檔案的編寫規則可以檢視make的man 和info文件(在Linux命令列方式下輸入:man make 或info make)。makefile檔案的編寫規則很多,重要的是怎樣使用最簡單的方式寫出我們自己需要的makefile檔案。
下文將著重介紹使用pwlib開發庫的工程的makefile的編寫,但對於其它工程只需將common.mak檔案中對pwlib庫進行編譯的指令碼去掉也可適用。
3.1.1使用pwlib開發庫的工程的makefile的編寫
PWLib是Portable Windows Library的縮寫,翻譯為輕便的Windows類庫.PWLib採用C++編寫,設計初衷是為了能讓Openh323在Windows和Unix的X-Windows下執行, 不過隨著一步步的完善PWLib已經被跨平臺的程式所廣泛採用。
檢視Pwlib的主目錄下/samples/hello_world/目錄下例子程式的makefile檔案可以發現該Makefile檔案內容如下:
# Simple makefile for the hello world program
PROG
SOURCES = hello.cxx
ifndef PWLIBDIR
PWLIBDIR=$(HOME)/pwlib
endif
include $(PWLIBDIR)/make/ptlib.mak
# End of Makefile
實際上就是使用了Pwlib庫的ptlib.mak檔案,編譯時需要的標頭檔案,相應的編譯選項都在ptlib.mak檔案中設定好了。
我們只需在該makefile檔案所在目錄下,命令列輸入make all命令即可編譯出程式的Release版本和Debug版本,它們分別放在當前目錄的obj_linux_x86_r和obj_linux_x86_d子目錄下。
下面對該makefile中的內容進行解釋:
lPROG變數為編譯出來的程式名稱。
lSOURCES變數儲存的為本工程要進行編譯和連結的原始檔,當有多個原始檔時可以用空格隔開,雖然檔名可以帶上路徑,但路徑在SOURCES變數中不起作用,實際編譯時對於每個檔案它將截掉最後一個”/”字元前面的所有內容只保留檔名。
lPWLIBDIR為pwlib的安裝目錄,需要設定該環境變數(若要系統每次重啟都自動設定好該環境變數則將該環境變數的設定放入/etc/profile檔案中),若沒設定好則自動以”使用者主目錄/pwlib”作為pwlib的安裝目錄。
3.1.2深入分析ptlib.mak檔案
分析ptlib.mak檔案,它的內容如下;
ifndef PWLIBDIR
PWLIBDIR=$(HOME)/pwlib
endif
include $(PWLIBDIR)/make/unix.mak
include $(PWLIBDIR)/make/common.mak
也就是ptlib.mak包含了另兩個檔案unix.mak和common.mak檔案,其中unix.mak為定義編譯選項變數的檔案,編譯規則放在common.mak檔案中。
通過對這兩個檔案的分析,歸納出一些我們寫makefile檔案要用到的一些變數,列出如下:
lSTDCCFLAGS:所有標頭檔案的include目錄編譯選項、預編譯巨集定義選項、警告選項、優化選項都放在該變數中,各編譯選項之間用空格分開。
lLDFLAGS:共享庫、靜態庫搜尋目錄設定放入該變數中。
lLDLIBS:連結時要用的庫的設定放入該變數中。
lVPATH_CXX:*.cxx原始檔的搜尋路徑放入該變數中,多個目錄以空格分開,編譯時將首先在makefile所在目錄查詢相應原始檔,沒找到則按照VPATH_CXX中的路徑設定進行查詢。
lVPATH_C:*.c原始檔的搜尋路徑放入該變數中,多個目錄以空格分開,檔案查詢順序和VPATH_CXX變數的類似。
3.1.3加入新的編譯規則
common.mak檔案中只對*.c和*.cxx的原始檔定義了編譯規則,而一般windows下程式大多都使用了.cpp來作為C++原始檔的字尾。
怎樣加入對於.cpp字尾的原始檔的編譯規則呢,這需要修改pwlib的common.mak檔案,具體步驟如下:
在vpath %.cxx $(VPATH_CXX)語句後面加入如下語句:
【摘要】
根據zxms80專案的會議排程模組移植的經驗,本文提出了Windows平臺上程式向Linux下移植所碰到的一些典型問題,並舉例給出了相應的解決方法,文中還描述了使用pwlib庫時makefile檔案的編寫方法,該方法也適用於不使用pwlib庫開發時的一般情況,供要進行移植的同仁參考之用
前幾天完成了一次Windows向Linux的程式碼移植,由於在Windows上開發時沒有考慮到相容性,所以移植的時候還是碰到了不少的問題,今天專門抽時間把問題和解決方法整理出來,作為經驗,以備將來查閱。
1. 包含的標頭檔案名稱大小寫問題
例如
[plain] 
一、為什麼要使程式在後臺執行
我們計算的程式都是週期很長的,通常要幾個小時甚至一個星期。我們用的環境是用putty遠端連線到日本Linux伺服器。所以使程式在後臺跑有以下三個好處:
1:我們這邊是否關機不影響日本那邊的程式執行。(不會像以前那樣,我們這網路一斷開,或一關機,程式就
1.首先先確定你的Oracle在linux環境下可以執行 用 Oracle 使用者 遠端登入, 然後 輸入: $ sqlplus / nolog SQL> conn / as sysdba
2.可以成功執行之後去oracle官方網站下載instantclient-basic-win32-x
僅做記錄,防止忘記:
1、linux下複製qt release模式生成的可執行檔案到桌面的新建目錄。
2、編寫指令碼檔案ldd.sh 作用:匯出可執行程式執行時所需要的庫檔案
點選下載。
3、執行 ./ldd
首先先確定你的Oracle在linux環境下可以執行
用 Oracle 使用者 遠端登入, 然後 輸入:
$ sqlplus / nolog
SQL> conn / as sysdba
可以成功執行之後去oracle官方網站下載instantclient-basic
一、為什麼要使程式在後臺執行
我們計算的程式都是週期很長的,通常要幾個小時甚至一個星期。我們用的環境是用Xshell遠端連線到Linux伺服器。所以使程式在後臺跑有以下兩個好處:
1:我們這邊是否關機不影響伺服器的程式執行。(不會像以前那樣,我們這網
在Ubuntu上,通過執行lddmyapp可以檢視應用程式依賴的動態連結庫,在=>後顯示”notfound”的動態連結庫就是需要複製的動態連結庫,例如:
libQt5Widgets.so.5=>not found
將缺失的動態庫複製到應用程式目錄後,由於實際的動
在專案開發中,因為是內網伺服器(本文操作操作環境:Centos 6.5+PHP 7),每次更新都需要連上VPN才能svn up更新程式碼。周而復始的操作浪費了大量的開發時間,故決定用PHP實現通過訪問url的方式來更新服務端的程式碼版本。
網上也看到了很多寫法 在使用iconv轉換檔案的字元編碼時,如果遇到類似“iconv: illegal input sequence at position”的錯誤,原因是需要轉換的字元編碼沒有涵蓋檔案中的字元,比如,將一個簡體中文的GB2312的檔案轉換為BIG5的編碼,而在繁體編碼的BIG5裡面,不包含很多的簡體中文字元,所以
在~/下, touch建立檔案 .git-credentials,
用vim編輯此檔案,輸入內容格式:
[email protected] ~ $touch .git-credentials
[email protected] ~ $vim .git-credentials
在
1.從本地上開啟遠端連線SecureCRT連線虛擬機器
2.進入oracle使用者下
3.輸入命令 imp sys/[email protected]:1521/ORCL file= D:\表名.dmp tables=表名
在這裡D:\
1、檢視:netstat -an|grep 3306 是空的,說明沒有在偵聽
解決辦法:修改/etc/my.cnf 將其中skip-networking註釋掉,然後執行netstat -an|grep 3306 就可以看到了
2、對於伺服器來說, 一次 準備 畢業 服務器 掃描 美國 安全 visual pro 從畢業到現在已經快20年了,一直在從事Windows平臺上的開發工作。剛畢業那會大約是97,98年左右,工作的平臺除了Windows平臺還有Dos平臺,因為在學校學習時,也是從Dos開始的。因此對於從事D
轉載標明出處:http://www.linuxidc.com/Linux/2008-10/16410.htm
關於這個話題網上流傳的是一個相同的版本,就是那個第一項是標頭檔案的區別,但後面列出的標頭檔案只有#include沒有(估計是原版的在不斷轉載的過程中有人不小心忘
一、相關說明
Ubuntu9.10 舉例(因為它方便,N多東西直接線上安裝,省得編譯了),其他linux基本相同(不同的就是有些要進行原始碼安裝,但用到的軟體是一樣的),整個安裝我以經做成指令碼放方便下載安裝不過指令碼寫的比較簡單沒有做太多判斷到這裡下載:http://download.csdn
畢業設計確定題目,導致必須看一些題目相關的中文論文進行入門。學校只有知網庫,沒有萬方庫,所以只能去知網。知網全是caj檔案,可是沒有Linux平臺的caj閱讀器。試了各種只用Linux解決的辦法,發現都不行。沒辦法,裝wine,用虛擬方式執行Windows吧╮(╯_╰)╭ 三天前明明跟室友說
Windows下:
說明:使用Qt自帶工具“windeployqt.exe”來拷貝大部分的動態庫(*.dll),一般有以下兩種方法。
前提,將Qt編譯方式選為:Release,把編譯好的*exe檔案拷
一、windows下用py2exe打包python程式生成exe檔案
1、py2exe是一種python釋出的打包工具,可以把python指令碼轉換成windows下的可執行程式,不需要安裝python便可執行。
2、首先需要安裝py2exe,我的python是2.7版本,
1 在windows下執行python程式
1)從DOS命令列執行python指令碼
用python直譯器來執行python指令碼,在windows下面python直譯器是python.exe,我的python檔案安裝在D:\Python27,在這個目錄下可 相關推薦
Windows下程式向Linux下移植細節
Windows向Linux程式碼移植常見問題
使程式在Linux下後臺執行 (關掉終端繼續讓程式執行的方法)
windows下PLsql連Linux下的Oracle
qt程式在linux下打包釋出
windows下plsql連線linux下的oracle資料庫
使程式在Linux下後臺執行,程式執行前後臺切換
Qt 程式在linux下的釋出
提效技巧 | PHP程式執行Linux下的SVN命令
window下檔案在Linux下檔案亂碼解決
分享下 :去掉linux 下git push時…
從windows環境中向linux環境中orale資料庫中匯入dmp檔案
window下工具訪問linux下mysql出現 error no 2003 10061錯誤的解決辦法
由Windows開發平臺向Linux平臺轉移的一些想法
Socket程式從Windows移植到Linux下的一些注意事項
[轉載][old] linux 下通過wine 執行windows程式包括IE
向Windows低頭,在Linux環境下使用wine進行caj檔案的讀取
QtCreator程式的釋出:Windows下、Linux下。
windows和linux下打包python程式
在windows下和Linux下執行python程式的方法