直接編譯即可,缺少依賴會有提示,按提示安裝即可。如果是自己編譯的庫文件,需要單獨指明,方法與一般編譯都一致。
⑵ devc++ 的庫文件怎麼用
VC中當然不能使用Dev-C++的庫!不過如果在Dev-C++中使用庫,方法和VC一樣,在Dev-C++菜單「工程」-「工程屬性」打開工程屬性對話框,在「參數」中的「連接器」中輸入 -l<庫名>即可。如要編譯OpenGL程序,需要三個庫 libopengl32.a, libglut32.a, libglu32.a 則在「連接器」中輸入:
-lopengl32 -lglut32 -lglu32
其中的庫名,不要輸入前面的lib和後綴.a!
如果你不想,每個工程都增加一次,可以在
菜單「工具」-「編譯選項」-「編譯器」中,將上面的-lopengl32 -lglut32 -lglu32輸入,並勾中「在連接器中加入下面命令」
⑶ 編譯帶有資料庫的exe文件後 怎樣給別人使用
資料庫要使用人建立
你只要在使用說明中告知使用人你的數據源名就行了
JAVA程序通過數據源名連接到資料庫
我們程序員做的是軟體,怎麼能管到客戶的資料庫那,
只要做好資料庫連接就可以了
⑷ VC 中如何使用 BCB 編譯的庫文件
在 Visual C++ 或者 Visual Studio 中, 是無法直接使用 BCB 工程編譯產生的庫文件的. 究其原因, 是由於微軟 Visual C++ lib 文件格式與 BCB 工程的 lib 文件格式不同所導致. Lib 文件中存放的是動態鏈接庫的介面信息, 而不會含有任何函數的內部實現細節. 因此, 我們可以直接通過 Dll 文件來反向生成特定格式的 lib 文件, 以便在 VC 和 BCB 中交叉使用各個編譯的動態鏈接庫.
以 MTK 平台的多路下載工具 SP_MDT 為例, 演示在 VC++ 中直接使用 BCB 編譯的 lib 庫的問題及解決方案. 我們以 Eboot 為例, 源代碼目錄下關於 Eboot 的文件有以下幾個:
Eboot 頭文件定義, 路徑: SP_MDT_SRCEboot
Eboot lib 庫文件, 路徑: SP_MDT_SRCLib
Eboot 動態鏈接庫文件, 路徑: SP_MDT_SRCoutput
我們新建一個 VC++ MFC 工程, 將上述文件全部拷貝到 MFC 工程目錄下, 同時在對話框中實現如下代碼段:
#include "interface.h"ANDROID_DL_HANDLE_T handle;
Android_DL_Create(&handle);
此時, 編譯工程會報出如下錯誤:
error LNK2019: 無法解析的外部符號 _Android_DL_Create@4
該符號在函數 "public: void __thiscall CLibDemoDlg::OnBnClickedOk(void)" 中被引用
原因在於我們僅僅包含了相應函數的頭文件, 而並沒有導入任何的函數實現(如 cpp 源文件或者 lib 庫文件). 接下來, 我們嘗試直接在 VC++ 中使用 BCB 編譯生成的 lib 庫文件, 加入以下代碼:
#pragma comment(lib, "eboot.lib")
編譯時報出如下錯誤:
eboot.lib : warning LNK4003: 無效的庫格式; 已忽略庫
顯然, VC++ 並不能正確的識別 BCB 所生成的 lib 庫文件. 那麼如何解決這個問題呢? 一般來說有兩種方法:
動態載入 dll 動態鏈接庫
最直接的方法是, 既然有頭文件, 那麼就可以知道各個函數的定義, 而 dll 動態鏈接庫則會將這些公開的函數導出. 因此, 可以直接調用 LoadLibrary 載入動態鏈接庫, 並查找到相應的函數地址, 完成調用. 這種方法簡單粗暴, 其好處是寫出的源代碼無論是在 BCB 還是在 VC++ 平台都能夠通用. 但其缺點也很明顯, 需要改寫頭文件, 定義各種各樣的函數指針, 如果使用到的導出函數很多, 則工作量較大.
⑸ 如何編譯生成和調用靜態庫
如何編譯動態庫
gcc test1.c test2.c -shared -fPIC -o libtest.so
使用動態庫
gcc main.c -L. -ltest -o a.out
(
-L : 表示需要庫的路徑
-l:表示需要庫的名稱,如libtest.so,名稱則為test
)
(ps:執行a.out時有可能提示找不到libtest.so文件,這時需要把庫文件放入到/lib等目錄下,或者添加環境變數LD_LIBRARY_PATH,包含有庫文件的路徑即可)
如何編譯靜態庫
gcc -c test1.c test2.c
ar -r libtest.a test1.o test2.o
使用靜態庫
gcc main.c -static -L. -ltest -o a.out
(
-static:可強制編譯時使用靜態庫,如果不使用這個參數,而靜態庫與動態庫同名的話,會優先使用動態庫
⑹ gcc編譯的.a庫怎麼在windows下使用
.a庫文件在window下能使用。首先有可執行文件。 我安裝的是dev-cpp
⑺ 如何在Windows下編譯sqlite3,生成動態鏈接庫並使用
一. 編譯動態鏈接庫庫文件
下面的是我的編譯過程,或許對你有些幫助:
1). 打開VC新建一個「Win32 Dynamic-Link Library」工程,命名為:sqlite3
2). 在接下來的對話框中選擇"An empty DLL project",點 FINISH->OK
3). 將源碼中所有的 *.c *.h *.def 復制到工程文件夾下
4). 在工程的Source File中添加你下載到的SQLite源文件中所有*.c文件,
注意這里不要添加shell.c和tclsqlite.c這兩個文件。
5). 將 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中
6). 在Header File中添加你下載到的SQLite源文件中所有*.h文件,
7). 開始編譯,Build(F7)一下
也許到這里會遇到一個錯誤:
e:\zieckey\sqlite\sqlite3\sqlite3ext.h(22) : fatal error C1083: Cannot open include file: 'sqlite3.h': No such file or directory
經檢查發現,源碼中包含sqlite3.h都是以 #include <sqlite3.h> 方式包含的,
這就是說編譯器在系統默認路徑中搜索,這樣當然搜索不到 sqlite3.h 這個頭文件啦,
這時可以改為 #include "sqlite3.h" ,讓編譯器在工程路徑中搜索,
但是如果還有其他地方也是以 #include <sqlite3.h> 方式包含的,那麼改源碼就顯得有點麻煩,
好了,可以這樣,在菜單欄依次選擇:Tools->Options...->Directeries
在下面的Directeries選項中輸入你的 sqlite3.h 的路徑,這里也就是你的工程目錄.
添加好後,在編譯一下就好了,
最後在工程目錄的 Debug 目錄生成了下面兩個重要文件:
動態鏈接庫文件 sqlite3.dll 和引入庫文件 sqlite3.lib
二. 使用動態鏈接庫
下面來編寫個程序來測試下動態鏈接庫.
在VC下新建一個空的"Win32 Console Application" Win32控制台程序,工程命名為:TestSqliteOnWindows
再新建一個 test.cpp 的C++語言源程序,源代碼如下:
// name: test.cpp
// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !
// Author : zieckey
// data : 2006/11/28
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_
int main( void )
...{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("zieckey.db", &db); //打開指定的資料庫文件,如果不存在將創建一個同名的資料庫文件
if( rc )
...{
fprintf(stderr, "Can't open database: %s ", sqlite3_errmsg(db));
sqlite3_close(db);
return (1);
}
else printf("You have opened a sqlite3 database named zieckey.db successfully! Congratulations! Have fun ! ^-^ ");
//創建一個表,如果該表存在,則不創建,並給出提示信息,存儲在 zErrMsg 中
char *sql = " CREATE TABLE SensorData(ID INTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,Time VARCHAR(12),SensorParameter REAL);" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
#ifdef _DEBUG_
printf("zErrMsg = %s ", zErrMsg);
#endif
//插入數據
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
sql = "INSERT INTO "SensorData" VALUES(NULL , 23 , 45 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
sql = "INSERT INTO "SensorData" VALUES(NULL , 34 , 45 , '200605011306', 15.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
int nrow = 0, ncolumn = 0;
char **azResult; //二維數組存放結果
//查詢數據
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
int i = 0 ;
printf( "row:%d column=%d " , nrow , ncolumn );
printf( " The result of querying is : " );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s ", i , azResult[i] );
//刪除數據
sql = "DELETE FROM SensorData WHERE SensorID = 1 ;" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
#ifdef _DEBUG_
printf("zErrMsg = %s ", zErrMsg);
#endif
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
printf( " row:%d column=%d " , nrow , ncolumn );
printf( " After deleting , the result of querying is : " );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s ", i , azResult[i] );
//釋放掉 azResult 的內存空間
sqlite3_free_table( azResult );
#ifdef _DEBUG_
printf("zErrMsg = %s ", zErrMsg);
#endif
sqlite3_close(db); //關閉資料庫
return 0;
}
另外,將sqlite3.h sqlite3.lib sqlite3.dll文件復制到工程目錄.
最後 Project->Settings 在Link選項卡找到Object/library moles : 在最後填入sqlite3.lib 。
如果原來就有鏈接,請使用空格分隔。
現在可以編譯了.
運行結果如下:
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
zErrMsg = (null)
row:3 column=5
The result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 1
azResult[6] = 1
azResult[7] = 1
azResult[8] = 200605011206
azResult[9] = 18.9
azResult[10] = 2
azResult[11] = 23
azResult[12] = 45
azResult[13] = 200605011306
azResult[14] = 16.4
azResult[15] = 3
azResult[16] = 34
azResult[17] = 45
azResult[18] = 200605011306
azResult[19] = 15.4
zErrMsg = (null)
row:2 column=5
After deleting , the result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 2
azResult[6] = 23
azResult[7] = 45
azResult[8] = 200605011306
azResult[9] = 16.4
azResult[10] = 3
azResult[11] = 34
azResult[12] = 45
azResult[13] = 200605011306
azResult[14] = 15.4
zErrMsg = (null)
Press any key to continue
這個程序,我們先創建一個資料庫,然後新建一個表,然後插入一些數據,
再查詢看看插入的數據是否正確,然後又刪除一些數據,刪除後我們再查詢了一下,
發現我們的刪除操作也是成功的.
這個程序簡單的調用 sqlite 的函數介面來實現對資料庫的管理,
包括創建資料庫、創建表格、插入數據、查詢數據、刪除數據等。
註:在上面的第五步
5). 將 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中
是必須的, sqlite3.def 這個文件的加入會生成 *.lib引入庫文件,這個對於*.dll文件是很重要的.否則你光有*.dll文件在程序調用的時候就不是那麼方便了,因為這樣你只能通過動態載入dll的方式調用dll庫中函數
三、如何編譯sqlite3.4.2版本 (本人原創:添加於 2007年9月29日)
其實這個版本的比之前的更好編譯而且很簡單。
步驟如下:
1、在網站下載源文件,選擇「sqlite-amalgamation-3_4_2.zip」。此文件中包含了sqlite3.h和sqlite3.c兩個文件。
2、下載「sqlitedll-3_4_2.zip」,次文件中包含編譯好的DLL文件和DEF文件,DEF文件用來在編譯時生成lib文件。(重點)
3、打開VC新建一個「Win32 Dynamic-Link Library」工程,命名為:sqlite3
4、 在接下來的對話框中選擇"An empty DLL project",點 FINISH->OK
5、將解壓後的 *.c *.h *.def 復制到工程文件夾下
6、在工程的Source File中添加你下載到的SQLite源文件中sqlite3.c文件,
7、 將 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中
8、在Header File中添加你下載到的SQLite源文件中的sqlite3.h文件,
9、 開始編譯,Build(F7)一下。
⑻ linux中編譯好的mysql怎麼使用
不同linux版本,安裝不同版本的mysql方法各不相同,下面以CentOS 6.5編譯安裝MySQL 5.6.16介紹:
一.准備工作
1.yum安裝各個依賴包
[root@WebServer ~]# yum -y install gcc gcc-devel gcc-c++ gcc-c++-devel autoconf* automake* zlib* libxml* ncurses-devel ncurses libgcrypt* libtool* cmake openssl openssl-devel bison bison-devel unzip
2.新建mysql組和用戶
[root@WebServer ~]# groupadd mysql
[root@WebServer ~]# useradd -g mysql -s /sbin/nologin mysql
3.目錄准備
[root@WebServer ~]# mkdir -p /webserver/mysql/etc
[root@WebServer ~]# mkdir -p /webserver/mysql/data
[root@WebServer ~]# mkdir -p /webserver/mysql/tmp
[root@WebServer ~]# chown -R mysql.mysql /webserver/mysql
4.解壓MySQL並進入安裝目錄
[root@WebServer ~]# tar zxvf mysql-5.6.16.tar.gz
[root@WebServer ~]# cd mysql-5.6.16
二.編譯並安裝
1.編譯MySQL
[root@WebServer mysql-5.6.16]# cmake -DCMAKE_INSTALL_PREFIX=/webserver/mysql \
> -DSYSCONFDIR=/webserver/mysql/etc \
> -DMYSQL_DATADIR=/webserver/mysql/data \
> -DMYSQL_TCP_PORT=3306 \
> -DMYSQL_UNIX_ADDR=/webserver/mysql/tmp/mysqld.sock \
> -DMYSQL_USER=mysql \
> -DEXTRA_CHARSETS=all \
> -DWITH_READLINE=1 \
> -DWITH_SSL=system \
> -DWITH_EMBEDDED_SERVER=1 \
> -DENABLED_LOCAL_INFILE=1 \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DENABLE_DOWNLOADS=1
2.如果出現以下錯誤
則需要
[root@WebServer mysql-5.6.16]# cd source_downloads/
[root@WebServer source_downloads]# unzip gmock-1.6.0.zip
[root@WebServer source_downloads]# ./configure
[root@WebServer source_downloads]# make
[root@WebServer source_downloads]# cd ..
然後刪除mysql-5.6.16目錄下的CMakeCache.txt重新使用cmake進行編譯安裝
2.安裝
[root@WebServer mysql-5.6.16]# make && make install
編譯過程會比較漫長,編譯時間取決於機器的性能
三.MySQL配置
1.客戶端庫文件的鏈接(未執行此步驟的話,在PHP編譯時會提示找不到MySQL文件)
[root@WebServer mysql-5.6.16]# ln -s /webserver/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18
ps:我使用的是64位CentOS,如果使用的是32位請使用ln -s /webserver/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18
2.MySQL啟動文件的配置
[root@WebServer mysql-5.6.16]# cp support-files/mysql.server /etc/init.d/mysqld
[root@WebServer mysql-5.6.16]# chmod +x /etc/init.d/mysqld
[root@WebServer mysql-5.6.16]# vim /etc/init.d/mysqld
basedir=/webserver/mysql
datadir=/webserver/mysql/data
//修改以上這2行的路徑即可
3.設置MySQL配置文件
[root@WebServer mysql-5.6.16]# cp support-files/my-default.cnf /webserver/mysql/etc/my.cnf
[root@WebServer mysql-5.6.16]# rm -rf /etc/my.cnf
[root@WebServer mysql-5.6.16]# ln -s /webserver/mysql/etc/my.cnf /etc/my.cnf
4.初始化資料庫
[root@WebServer mysql-5.6.16]# cd /webserver/mysql
[root@WebServer mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/webserver/mysql --datadir=/webserver/mysql/data
5.鏈接MySQL命令(這一步可以讓我們方便很多,可以不用寫出命令的路徑,也可以寫入/etc/profile的PATH中)
[root@WebServer ~]# cd /usr/sbin
[root@WebServer sbin]# ln -s /webserver/mysql/bin/* .
6.啟動MySQL並設置為開機啟動
[root@WebServer sbin]# service mysqld start ;chkconfig mysqld on
Starting MySQL.. SUCCESS!
7.設置MySQL root用戶的密碼
[root@WebServer ~]# mysqladmin -u root password 123456
這里將MySQL的root密碼設置為123456,強烈不建議將資料庫的密碼設的簡單
8.刪除用戶密碼為空的用戶
[root@WebServer ~]# mysql -u root -p
Enter password:
mysql> use mysql;
mysql> select Host,User,Password from user;
+-----------+------+-------------------------------------------+
| Host | User | Password |
+-----------+------+-------------------------------------------+
| localhost | root | * |
| webserver | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| webserver | | |
+-----------+------+-------------------------------------------+
6 rows in set (0.00 sec)
mysql> delete from user where password="";
Query OK, 5 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select Host,User,Password from user;
+-----------+------+-------------------------------------------+
| Host | User | Password |
+-----------+------+-------------------------------------------+
| localhost | root | * |
+-----------+------+-------------------------------------------+
1 row in set (0.00 sec)
mysql> exit;
完畢。