嵌入式sql c檔案編譯

2021-06-18 20:00:59 字數 2176 閱讀 3010

a.預編譯部分 

1.1 什麼是db2預編譯

在我們用c語言編寫訪問db2的程式過程中,需要用到嵌入式sql,其作用是將db2 sql混入一般c程式中, db2預編譯器可以將sql語法直接轉換為db2行時服務應用程式程式設計介面(api)呼叫。

1.2 什麼是bind 

這是db2 prep要做的事情,即把sqc中的sql語句變為db2資料庫可認的api。bind的作用主要是根據你sqc中的sql語句使用的表和操作指定乙個訪問時db要使用的策略,是一種優化作用,加快資料訪問的速度;當然也可以不bind,那樣,訪問的過程策略是在訪問時才有的,速度會受很大的影響,特別是併發訪問。 

2.預編譯命令 

2.1 db2 prep .sqc檔案 bindfile 其中bindfile引數作用是生成和sqc檔案同名的.bnd檔案

例: db2 prep /export/home/shwhome/sqc/con_db2.sqc bindfile 如果編譯正常完成,則在.sqc檔案同目錄下會生成con_db2.c和con_db2.bnd檔案 

2.2 bind .bnd檔案 

例: db2 bind /export/home/shwhome/sqc/con_db2.bnd 

因為是db2的預編譯命令,使用的是db2的預編譯器,所以以上兩條命令需要在連線db2資料庫的情況下才可以使用 

b.嵌入式部分 

1.嵌入式c程式的編譯 

我們採用gcc來編譯c程式,gcc的一般編譯命令請參考文件中的相關說明,這裡具體說明在目前環境下編譯c程式的注意點。

1.1 編譯c程式

gcc -m64 -c -i/export/home/shwhome/inc -o /export/home/shwhome/obj/testdb.o /export/home/shwhome/src/testdb.c 

引數說明 

-m64: 在64位伺服器上編譯時採用,這裡為了將所有的編譯後的目標檔案統一,所以都加上-m64,如果再之後引用目標檔案沒有採用-m64編譯則在最後編譯時會出現elf class32(或elf class64)錯誤. -c: 只編譯並生成目標檔案,不做鏈結。 

1.2 編譯sqc檔案生成的.c檔案

gcc -m64 -c -i/export/home/shwhome/inc -i/export/home/aix/sqllib/include -l/usr/include/lib -o /export/home/shwhome/obj/con_db2.o /export/home/shwhome/sqc/con_db2.c 

引數說明 

-i/export/home/aix/sqllib/include: 這個目錄下主要使用到2個頭檔案:sqladef.h和sqlca.h,這個是db2預編譯包含的都檔案,可以檢視你用prep編譯出來的與.sqc同名的.c檔案,其中就包含這兩個標頭檔案。其中aix是db2instance使用者,db2安裝後會將include路徑複製到instance使用者的環境變數中,再次建立instance後只要複製過來就可以,因為instance使用者還包含其他的環境設定,所以不要直接引用-i/opt/ibm/db2/v9.5/include/這個db2的安裝路徑 

-l/usr/include/lib: 這個目錄是系統包含函式的庫檔案,是編寫應用程式的時候使用的相當於api,也就是應用程式設計介面。

※ -i/usr/include和-l/usr/include/lib是將usr/include下的函式作為標頭檔案包括進來,並且將程式鏈結到庫檔案,這個例子中沒有用到,但是如果保險的話,在編譯時最好加上這兩個選項。

1.3 將兩個目標檔案(主體c程式和嵌入式sql)編譯成可執行程式

gcc -m64 -ldb2 -lc -o /export/home/shwhome/bin/testdb /export/home/shwhome/obj/con_db2.o /export/home/shwhome/obj/testdb.o 

引數說明 

-ldb2: 鏈結db2庫檔案。在sqc程式編譯時必須鏈結libdb2.so庫,其路徑是/usr/lib/krb5/libdb2.so,之所以寫成-ldb2,是在使用-l時,將庫名的lib和字尾都去除,即庫名是db2。以上命令是引用/export/home/shwhome/obj/con_db2.o /export/home/shwhome/obj/testdb.o這兩個目標檔案,編譯後生成testdb,放在路徑/export/home/shwhome/bin下。

嵌入式 linux 編譯

第二次換了編譯環境編譯時又提示 make 3 drivers video console vgacon.o 錯誤 1 在網上搜尋結果 根據資訊的大概意思是關於vga的支援問題,在這裡我直接把關於vga的配置選項去掉不選,即 在執行 make menuconfig 配置時 不選vga 驅動。devic...

嵌入式gdb工具編譯

對於嵌入式gdb而已,分為兩種,這兩種方法的的區分是鑑於使用和編譯後的工具而言。1 第一種是開發板上使用的gdb,就像pc機上linux系統使用gdb一樣。2 第二種是開發板上使用單板的gdb client,pc機上使用pc版本gdb server。兩者通過網路來互動資訊實現除錯。筆者除錯是使用的第...

嵌入式產品 編譯核心

2.安裝圖形化配置工具 sudo apt get install libncurses dev 3.指定cpu架構和編譯器 方法一 在核心原始碼根目錄下的makefile中指定交叉編譯工具 arch arm cross compile arm none linux gnueabi 編譯器字首 arc...