① 在windows下如何利用Cygwin進行編程
Windows下使用C語言+嵌入SQL實現DB2開發 Cygwin,gcc的介紹和安裝在前面的文章有將過,請參考
在Windows中使用Cygwin環境下的gcc編譯器編譯Informix ESQ/C程序
對於DB2的嵌入SQL程序,有以下步驟:
1)編寫dbconn.sqc程序(一個簡單的連接資料庫,查詢並顯示的例子)2)在Cygwin命令行中鍵入 db2cmd 啟動一個新的db2命令行窗口
在db2命令行窗口中:
3)預編譯
db2 prep dbconn.sqc
生成dbconn.c文件
4)編譯
gcc -I"C:\Program Files\埋困態IBM\SQLLIB\include" dbconn.c "C:\Program Files\IBM\SQLLIB\lib\db2api.lib"
生成a.exe文件
在C程序>文章中提到在使用gcc編譯時如果路徑中包含空格的路徑,就不能正確解析。
這次發現可以將路徑用雙引號引起來就可以了。
5)執行a.exe,成功
如果需要生成外部綁定文件,(db2執行預編譯時默認是做綁定了)
1)db2 prep dbconn.sqc bindfile
生成
dbconn.c, dbconn.bnd
2)手工綁定
db2 bind dbconn.bnd
3)綁定完後尺簡一定要重新編譯,否則報-818,
db2 ? SQL0818
預編譯時由預編譯器生成的時間戳記與綁定時存在的包內的時間戳記彎源不同
附錄1
dbconn.sqc程序
#include
#include
#include
int main()
{
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char firstnme[12+1];
EXEC SQL END DECLARE SECTION;
long RetCode = SQL_RC_OK;
char ErrorMsg[1024];
EXEC SQL CONNECT TO sample USER zhangjij USING happyday;
EXEC SQL SELECT firstnme INTO :firstnme FROM employee WHERE empno='000099';
if (sqlca.sqlcode != SQL_RC_OK)
{
RetCode = sqlaintp(ErrorMsg, sizeof(ErrorMsg), 70, &sqlca);
switch (RetCode)
{
case -1:
printf("ERROR: Insufficient memory.\n");
break;
case -3:
printf("ERROR: Message file is inaccessible.\n");
break;
case -5:
printf("ERROR: Invalid SQLCA, bad buffer, or bad buffer length specified.\n");
break;
default:
printf("sqlca.sqlcode=[%ld], Message= [%s] \n", sqlca.sqlcode, ErrorMsg);
break;
}
}
printf("OK = [%s] \n", firstnme);
EXEC SQL DISCONNECT CURRENT;
return(0);
}
② Cygwin Terminal 下 怎麼寫C++程序並編譯運行
你可以利用touch a.cpp建立一個空的文件,然後利用vi a.cpp進行編輯操作,g++ a.cpp進行編譯,./a.out進行運行程序操作。
也可以直接vi進去,退出進行相應的文件的保存。
③ cygwin下編譯,調試C源程序
你是初學者吧,沒關系,很簡單的。
cygwin我沒用過,大概是別人給套了個可視化編程界面了。
1.你運行cygwin這個軟體,然後「文件/打開/」把你准備好的C源代碼載入到這個軟體中。(就好比我們平時用word時,先運行word軟體,然後把你的文檔加如入並進行編輯。)
2.在軟體界面上(一般在:工具欄)找一個功能為「運行」的按紐。
准備知識:
寫一個程序一般分以下步驟:
1.編輯(就是把你的源代碼寫出來,你可以用「記事本」寫,當然一般編程工具cygwin也會提供編輯環境)
2.編譯+連接(你只要點個按紐就行,這個任務完全由cygwin完成,你不必管它怎麼完成這個任務的。
==============================
那麼,編譯是什麼意思呢?
==============
由於你是初學者,我只能用盡可能通俗的話給你解釋一下,這種解釋是不夠准確的。因為計算機本身只認識二進制指令,就是0/1的序列,每個0/1的序列都在計算機設計時,就賦予了一定的含義。比如:設計師可以把0001表示作個加法,用0000表示作個減法。但是如果人們用0/1的序列來表達我們的需求,顯然非常麻煩。於是,後來一些科學家就發明了一種近似英語的計算機語言C,很明顯如果要讓計算機也明白C表達的意思,我們就必須把C翻譯成0/1的序列。那麼,編譯就可以理解為「翻譯」。
[打個比方1]這就好比,你是個中國人,你只會說中文,計算機是個美國人,它只會說英語。你要請計算機給你做件事,你可以用中文寫好你的要求,然後請個翻譯,把你的要求翻譯成英語。)
======
調試是什麼呢?
=====
調試分兩個層面:(沿用上面的比方1)
1.語法層
你用中文表達你的要求時,可能你的用語不夠規范,或寫了錯別字,使得你
請的翻譯不理解你的意思,沒辦法翻譯下去。這時,這個翻譯就會通知你說:「對不起,你這個字是不是寫錯了」。於是,你就「調整調整,修改修改,才試一試」(「調試」由此得名),然後才請翻譯進行翻譯。
2.語意層
由於你的疏忽,你把要求表達錯了。舉個離譜點的例子:你本意是打算請計算機幫你買張去北京的火車票的,結果你不小心,寫成了買張去上海的火車票。出現這個錯誤,翻譯沒方法告訴你,只有等計算機把一張上海的車票給你,你才意識到,於是你重新調試,才執行。
④ 用cygwin如何編譯已經寫好的makefile文件
使用cd命令跳轉到makefile所在目錄
$ cd FILE_PATH
使用make命令,make會自動尋找文件名為makefile的文件
$ make
⑤ 如何使用cygwin編譯.c文件生成so文件
cygwin難用死了,原來想在它下面用hydra,高低用不起,還用unix就行了
⑥ 在windows下如何利用Cygwin進行編程
(轉)從windows到linux--編程篇--cygwin,在win中開發linux程序 從windows到linux -- 編程篇 -- cygwin,在win中開發linux程序
乾坤一笑[smileonce] [email protected] 2004-7-23
版權所有 轉載請註明出處 http://blog.csdn.net/smileonce 很多用windows的朋友不習慣於用linux的開發環境。雖然很樂意嘗試一下,但是往往怕linux系統
打亂了自己的正常生活:1〉裝linux系統把windows系統給搞壞了,導致自己無法正常生活;2>linux開
發上手太難,寫出第一個helloworld不亞於java的難度,環境配置摸不著頭腦。 對於此,我的看法是:
路不管平還是陡,終歸你要走的,如果你願意投入到linux開發的社群中來,不會安裝linux系統,不會配
置工作環境是不能想像的。(事實上,確實要了解很多東西的原理,不然很難排錯:諸如,硬碟引導器的引
導原理、分區結構原理及linux分區結構和文件系統、環境變數的設置、種類繁多的壓縮包安裝包的解壓安
裝方法、用戶管理許可權管理等常用命令、以至於驅動安裝系統中文化等等異常瑣碎的東東)。本文試圖跳過這個難走的步驟,啟用一個win環境下的linux模擬器(和linux下面的命令行開發環境基本
一致),用短短的20分鍾的時間,教你做出一個純正的linux下gcc編譯的helloworld。就象是買點心前
先嘗嘗味道,不也是一件很愉快的事情么?(註:cygwin事實上不僅有此模擬功能,它也是移植unix<-->
win程序的一個很有效的工具,也有人用它來做嵌入式系統開發)一、cygwin是什麼?
這個問題你最好google一下"cygwin的歷史",或許能夠獲得更為詳盡的答案。簡而言之,cygwin是一
個在windows平台上運行的linux模擬環境,是cygnus solutions公司開發的自由軟體(該公司開發了
很多好東西,著名的還有eCos,不過現已被Redhat收購)。插一句廢話,很多朋友不明白linux和unix的
區別和聯系,在此也簡要介紹一下。UNIX是一個注冊商標,是要滿足一大堆條件並且支付可觀費用才能夠
被授權使用的一個操作系統;linux是unix的克隆版本,是由其創始人Linus和諸多世界知名的黑客手工打
造的一個操作系統。為什麼linux和unix之間有很多軟體可以很輕松的移植?因為linux也滿足POSIX規
范,所以在運行機制上跟unix相近。
以下引用網上的一段話(出處:aspx"> http://blog.csdn.net/glock18/archive/2004/07/10/38275.aspx),
用於說明cygwin的工作機制:cygnus當初首先把gcc,gdb,gas等開發工具進行了改進,使他們能夠生成
並解釋win32的目標文件。然後,他們要把這些工具移植到windows平台上去。一種方案是基於win32 api
對這些工具的源代碼進行大幅修改,這樣做顯然需要大量工作。因此,他們採取了一種不同的方法——他們寫
了一個共享庫(就是cygwin dll),把win32 api中沒有的unix風格的調用(如fork,spawn,signals,
select,sockets等)封裝在裡面,也就是說,他們基於win32 api寫了一個unix系統庫的模擬層。這樣,
只要把這些工具的源代碼和這個共享庫連接到一起,就可以使用unix主機上的交叉編譯器來生成可以在
windows平台上運行的工具集。以這些移植到windows平台上的開發工具為基礎,cygnus又逐步把其他的
工具(幾乎不需要對源代碼進行修改,只需要修改他們的配置腳本)軟體移植到windows上來。這樣,在
windows平台上運行bash和開發工具、用戶工具,感覺好像在unix上工作。關於cygwin實現的更詳細描述,
請參考 http://cygwin.com/cygwin-ug-net/highlights.html二、cygwin的安裝。
cygwin的安裝文件很容易通過google找到。目前國內的網站上有「網路安裝版」和"本地安裝版"兩種。
標準的發行版應該是 網路安裝版。兩者並無大不同,下面介紹一下安裝的過程。 step1. 下載後,點擊安裝文件(setup.exe)進行安裝,第一個畫面是GNU版權說明,點"下一步(N)—>",
進入安裝模式選擇畫面。 step2. 安裝模式有"Install from Internet"、"Download form Internet"、
"Install from Local Directory" 三種。"Install form Internet"就是直接從internet上裝,
適用於網速較快的情況。如果你和我一樣網速不是很快,或者說裝過之後想把下載的安裝文件保存起來,
下次不再下載了直接安裝,就應該選擇"Download form Internet",下載安裝的文件(大約40M左右)。
事實上,所謂的"本地安裝版",也是別人從網上下載全部文件後打的包(適用於中國國情嘛^_^)
step3. 接下來是選擇安裝目的路徑和安裝源文件所在的路徑,之後就進入了選擇安裝包所在的路徑。
注意了阿,這里可是重頭戲。我第一安裝的時候就是沒有看清這一步,結果沒有把gcc裝進去,導致沒法編
譯文件。
+ All Default
+ Admin Default
....
+ Devel Default
+ Editors Default
....
如上圖所示,你在這個TreeView的某個節點上雙擊,就可以改變它的狀態,如Default、Install、
Uninstall、Reinstall四種狀態。默認的都是Default狀態,很多工具的默認狀態都是不安裝。
在這里我選擇了在All上點Install,全部安裝,以免後患。(全部安裝大概不到200M的空間) step4. 點下一步,安裝成功。它會自動在你的桌面上建立一個快捷方式。 好了,下面就開始我的linux旅程了。雙擊cygwin的快捷方式進入系統。
首先介紹幾個簡單的linux命令。
pwd 顯示當前的路徑
cd 改變當前路徑,無參數時進入對應用戶的home目錄
ls 列出當前目錄下的文件。此命令有N多參數,比如ls -al
ps 列出當前系統進程
kill 殺死某個進程
mkdir 建立目錄
rmdir 刪除目錄
rm 刪除文件
mv 文件改名或目錄改名
man 聯機幫助
less 顯示文件的最末幾行由於linux下面的命令大多都有很多參數,可以組合使用。所以,每當你不會或者記不清楚改用那個參數,
那個開關的時候,可以用man來查找,比如,我想查找ls怎麼使用,可以鍵入
$ man ls
系統回顯信息如下:
LS(1) FSF LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by
default). Sort entries alphabetically if none of -cftuSUX
nor --sort.
-a, --all
do not hide entries starting with .
-A, --almost-all
do not list implied . and ..
-b, --escape
print octal escapes for nongraphic characters
--block-size=SIZE
use SIZE-byte blocks
:
很全是吧,嘿嘿。好了,多說無意,讓我們來寫一個hello world程序。
# cd
進入了/home/administrator目錄,我當前的登陸帳號是administrator# mkdir source
建立一個叫做source的子目錄# cd source
進入 /home/administrator/source# vim hello.c 啟動vim編輯器,來編寫程序。好了,現在有必要簡要介紹一下vim。
在linux界,有兩大編輯器最有歷史。其一是vi,其二是emacs。vi現在已經演化成了vim,比當前的vi
更為強大。vim和emacs是兩種截然不同的東西,vim強調用簡潔的命令來完成功能,無論是查找、替換、
正則表達式匹配、編譯、鏈接、排錯、函數間跳轉等等等等都在命令行中完成,並且它把方向鍵也集成在
了hjkl四個鍵之上,可以說,用了vim基本上可以不用滑鼠了:p emacs則是在功能強大上做文章,版本
控制、模擬多種編輯環境、對文本進行各種操作,可謂之一個強大的文本處理系統。emacs是用諸如
Ctrl+Alt+K 之類的組合鍵來控制的;vim則是用se(set 的縮寫)等簡潔命令來控制的。
由於cygwin中只提供了vim(能不能自己裝emacs我還沒有試過),我們就先體驗一下vim吧:p
vim載入文本文件後分為命令模式和插入模式兩種。插入模式,顧名思義就是輸入編輯文本;命令模式,則
是輸入各種控制命令,常用的有:
i 進入編輯模式
h 左移
j 下移
k 上移
l 右移
w 存檔
q 退出
! 強調執行有些命令是可以組合使用的,如果你修改了某個文件,想存檔退出,則可以使用wq;如果你想放棄存檔,
直接退出則可以使用q! 好了大家體驗一下吧,記住:從編輯模式退回命令模式按"Esc",再按":",在輸入指
令,從命令模式進入編輯模式用i,初次使用vim肯定很難受,嘿嘿,不過用多了就習慣了,確實很省勁。我們編輯hello.c文件,輸入:
#include <stdio.h>int main(void) {
printf( "Hello World!");
}
然後,輸入wq命令退到命令行。
輸入編譯指令:
# gcc hello.c -o hello
編譯成功後可以看一下
# ls
看到hello.exe了吧,嘿嘿。
好,讓我們運行看看。
# ./hello
效果如何?不錯吧? :)okey,現在玩一個C++的hello world,
# vim world.cpp
輸入:
#include <iostream>
using namespace std;void main() {
cout << "Hello World!";
}
編譯C++程序要用g++
# g++ world.cpp -o world
運行一下哈,
# ./world如何,效果不錯吧?諸位都是高手,走到這步應該編些簡單程序都不成問題了吧:p
好了,關於如何編寫makefile文件,如何用gdb下次再說了。