Linux編譯安裝相關命令,下面以Linux安裝MySQL工具為例進行說明,代碼如下:
創新互聯主要從事成都做網站、成都網站設計、網頁設計、企業做網站、公司建網站等業務。立足成都服務雙湖,十年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:18982081108
1、測試環境在Linux MySQL下進行,版本系統為CentOS5,以下為相關軟件:
mysql-5.1.30
memcached-1.2.6
libevent-1.4.7-stable
memcached_functions_mysql-0.8
libmemcached-0.26
2、編譯安裝Linux MySQL
[root@localhost?~]#tar?xzf?mysql-5.1.30.tar_001.gz??
[root@localhost?~]#cd?mysql-5.1.30??
[root@localhost?~]#./configure?--prefix=/usr/local/mysql51??
[root@localhost?~]#make??
[root@localhost?~]#make?install??
[root@localhost?~]#./scripts/mysql_install_db?--user=mysql?--skip-name-resolve??
[root@localhost?~]#/usr/local/mysql51/bin/mysqld_safe?
#連接符這是放入后臺,是前一個正確執行,才會執行后一個
#Linux編譯安裝流程./configure??make??make?install(默認目錄安裝)
#./configure?--prefix=/usr/local/pcre??make??make?install(指定安裝目錄)
在Linux下面,如果要編譯一個C語言頭文件,,要使用GNU的gcc編譯器,以一個實例來說明如何使用gcc編譯器:
假設有下面一個非常簡單的源程序(hello.c):
1
2
3
4
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}
要編譯這個程序,只要在命令行下執行:
1
gcc -o hello hello.c
gcc 編譯器就會生成一個hello的可執行文件;執行./hello,就可以看到程序編譯后的輸出結果“Hello Linux”。
我用一個例子來告訴你怎么樣在 C++ 里使用C的頭文件/函數。
比方說我有一個C的頭文件叫 c.h, C的源碼文件叫 c.c,內容分別是
c.h:
#ifndef _ASDFD_INCLUDED_
#define _ASDFD_INCLUDED_
#include stdio.h
extern int test(int a);
#endif
c.c:
#include "c.h"
int test(int a)
{
printf("A = %d\n", a);
return a*a;
}
現在我想在c++中使用c.c中提供的函數test(),我的c++文件名字叫 a.cpp,那么里面跟C有關的部分就要用 extern "C" {} 大括號括起來,看看我的
a.cpp:
#include iostream
using namespace std;
extern "C"
{
#include "c.h"
}
int main()
{
int b = 12;
b = test(b);
cout"b = "bendl;
return 0;
}
看到了吧,#include "c.h" 被 extern "C" {}括起來了。
然后是如何編譯,先把C文件編出目標文件(.o)來
gcc -c c.c
你會看到生成了 c.o,其實,有目標文件就夠了,如果你一定要做成(靜態/動態)庫文件,也是可以的,不過我這里就不深入了,做成庫和直接用目標文件對解決你的問題沒有任何區別。
然后再編譯C++文件,也就是我的 a.cpp
g++ -o hello a.cpp c.o
看到了吧,我在編譯 a.cpp 的時候把C生成的 c.o也加上了。 然后生成 可執行的 hello, 運行
./hello
就可以看到
A = 12
b = 144
關于創建靜態庫,假定你有3個C文件, a.c, b.c, c.c 提供了你C++要用到的接口,那么可以把這三個C文件編譯出來的目標文件放到一個庫文件里供C++使用,方法為
先編譯出目標文件
gcc -c a.c b.c c.c
這時候你應該看到有 a.o b.o c.o了
然后創建庫文件
ar cr libtest.a a.o b.o c.o
這三個目標文件就放入 libtest.a 這個靜態庫中了,然后編譯C++程序 (你的C++程序應該已經按照我前面說的用 extern "C" 把C的接口都括起來了),假定你的 libtest.a 放在 /home/aaa/lib下
g++ -o my.exe my.cpp -L/home/aaa/lib -ltest
就會生成可執行文件 my.exe了。
采用交叉編譯的主要原因在于,多數嵌入式目標系統不能提供足夠的資源供編譯過程使用,因而只好將編譯工程轉移到高性能的主機中進行。
linux下的交叉編譯環境重要包括以下幾個部分:
1.對目標系統的編譯器gcc
2.對目標系統的二進制工具binutils
3.目標系統的標準c庫glibc
4.目標系統的linux內核頭文件
交叉編譯環境的建立步驟
一、下載源代碼 下載包括binutils、gcc、glibc及linux內核的源代碼(需要注意的是,glibc和內核源代碼的版本必須與目標機上實際使用的版本保持一致),并設定shell變量PREFIX指定可執行程序的安裝路徑。
二、編譯binutils 首先運行configure文件,并使用--prefix=$PREFIX參數指定安裝路徑,使用--target=arm-linux參數指定目標機類型,然后執行make install。
三、配置linux內核頭文件
首先執行make mrproper進行清理工作,然后執行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)進行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架構,因為缺省架構為主機的cpu架構),這一步需要根據目標機的實際情況進行詳細的配置,筆者進行的實驗中目標機為HP的ipaq-hp3630 PDA,因而設置system type為SA11X0,SA11X0 Implementations中選擇Compaq iPAQ H3600/H3700。
配置完成之后,需要將內核頭文件拷貝到安裝目錄: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux
四、第一次編譯gcc
首先運行configure文件,使用--prefix=$PREFIX參數指定安裝路徑,使用--target=arm-linux參數指定目標機類型,并使用--disable-threads、--disable-shared、--enable-languages=c參數,然后執行make install。這一步將生成一個最簡的gcc。由于編譯整個gcc是需要目標機的glibc庫的,它現在還不存在,因此需要首先生成一個最簡的gcc,它只需要具備編譯目標機glibc庫的能力即可。
五、交叉編譯glibc
這一步驟生成的代碼是針對目標機cpu的,因此它屬于一個交叉編譯過程。該過程要用到linux內核頭文件,默認路徑為$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一個名為sys-linux的軟連接,使其內核頭文件所在的include目錄;或者,也可以在接下來要執行的configure命令中使用--with-headers參數指定linux內核頭文件的實際路徑。
configure的運行參數設置如下(因為是交叉編譯,所以要將編譯器變量CC設為arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最后,按以上配置執行configure和make install,glibc的交叉編譯過程就算完成了,這里需要指出的是,glibc的安裝路徑設置為$PREFIXARCH=arm/arm-linux,如果此處設置不當,第二次編譯gcc時可能找不到glibc的頭文件和庫。
六、第二次編譯gcc
運行configure,參數設置為--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。
運行make install。
到此為止整個交叉編譯環境就完全生成了。
幾點注意事項
第一點、在第一次編譯gcc的時候可能會出現找不到stdio.h的錯誤,解決辦法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS變量的設定中增加-Dinhibit_libc和-D__gthr_posix_h。
Linux編譯c++源文件使用的命令為g++,操作步驟如下:
用vim命令打開一個文本進行編輯,如:
#vim hello.cpp
書寫源代碼內容,如:
#include?stdio.h
int?main()
{
printf("hello?world\n"?);
return?0;
}
按ESC鍵,終止輸入,用:wq命令保存,退出。
編譯
#g++ -o hello hello.cpp
-o的意思是用來指定生成程序的名字
運行
#./hello
hello world
#
預處理對頭文件、宏定義等進行處理,生成
.i
的默認文件,命令:gcc
-E
test.ctest.i
當前文章:linux頭文件編譯命令 頭文件 編譯
鏈接地址:http://vcdvsql.cn/article28/hejgcp.html
成都網站建設公司_創新互聯,為您提供小程序開發、App開發、網站制作、網站收錄、自適應網站、移動網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯