autoconf源碼編譯
一、首先到http://www.sqlite.org/download.html下載linux版本的源碼:sqlite-autoconf-3130000.tar.gz。
二、解壓:tar xvzf sqlite-autoconf-3130000.tar.gz
三、進入解壓後的目錄:$ cd sqlite-autoconf-3130000
四、執行:./configure CC=/opt/poky/1.6.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc --host=arm-linux --prefix= /usr/tmp/
說明:CC賦值為嵌入式開發環境所使用的交叉編譯工具,--host指定軟體運行環境為arm-linux, --prefix指定源碼交叉編譯後生成文件的路徑。
五、執行 sudo make && make install
六、將在 /usr/tmp/lib 目錄下生成的 libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6三個so文件拷貝的,嵌入式開發環境的/lib/目錄 或者程序運行依賴的lib目錄下即可。
將/usr/tmp/bin 目錄下的 sqlite3 應用程序拷貝到嵌入式開發環境下就可以運行並創建資料庫了。
七、編譯程序 需要加上 -l sqlite3 這個鏈接選項。
B. CentOS-6.5-x86_64bit上安裝antoconf源碼包,提示這個錯誤:x86_64-unknown-linux-gnu,怎麼解
這里沒有錯誤啊
x86_64-unknown-linux-gnu是可以接受的
你吧輸出貼全吧,錯誤沒有貼出來
C. 尋求ubuntu下的asterisk的完整安裝方法急急!!
你使用的是apt-get 吧?
你使用svn活的源碼編譯安裝吧。安裝默認到/etc/asterisk下面, 另外make, install之後,安裝一個sample, 這個說明在readme中有。再修改sample對應的主機地址埠等久能夠使用了, 有說明問題給我留言。
D. autoconf是什麼意思
autoconf是一個產生可以自動配置源代碼包,生成shell腳本的工具,以適應各種類UNIX系統的需要
E. 如何在 Linux 上安裝 git 服務
1、yum方式安裝
# yum -y install git
如果提示系統提示沒有找到git包,可以採用下面的方式
2、下載Git源碼包
官網:http://git-scm.com/
$ tar -xjvf git-1.7.4.1.tar.bz2
$ cd git-1.7.4.1/
$ make prefix=/usr/local all
$ make prefix=/usr/local install
F. c腳本在不同系統中編譯和鏈接依賴的庫文件有何區別
問題1,
區別很大,跨OS編譯的區別就在於OS的本質區別,有一下幾點:
a, 位元組排序,一個int型的數據在windows里是由高地址存到低地址的4個位元組的(假設是32位機器),但是在某些UNIX伺服器,如AIX,它的排序方式就相反的,所以當程序被編譯成低級語言(例如匯編)的時候,內存及CPU的處理就會截然相反
b, 字長,有些unix伺服器是64位的,但大多WINDOWS是32位,那麼定義一個整形的時候就有用8個位元組和4個位元組的區別,字長不一樣,那麼執行起來用對內存的使用也自然就不一樣咯。
c,所謂的庫,也是由編譯器編譯出來的,在不同的OS下,由同一個代碼編譯出來的庫也會不一樣。
d,編譯器也各不相同,也會導致編譯出程序不完全相同。
e,所謂的調用,也就是將程序和庫一起打包,然後在找到庫裡面所定義的函數罷了
綜上,當一個程序或者庫要從其他OS搬到另一個不同規格的OS上的時候,一定要重新編譯一下草能確保程序跑起來不發生錯誤,求其原因也就是因為OS的本質區別,兼容的話,其實就是看OS是否在規格上有沒有本質區別
二,庫文件的編譯是單向的,所以無法取回源碼,
.a庫的打包例: ar r libabc.a a.o b.o c.o
將a.o b.o c.o 合並打包成libabc.a。注意哦(.a一定要以lib開始.a結束哦)
WIN下我不是很在行,你說的lib大包應該沒錯。
三,我不是很清楚
希望對你有幫助,我2年工作的精華
G. linux中如何安裝autotools系列工具
autotools使用流程
正如前面所言,autotools是系列工具,讀者首先要確認系統是否裝了以下工具(可以用which命令進行查看)。
· aclocal
· autoscan
· autoconf
· autoheader
· automake
使用autotools主要就是利用各個工具的腳本文件以生成最後的Makefile。其總體流程是這樣的:
· 使用aclocal生成一個「aclocal.m4」文件,該文件主要處理本地的宏定義;
· 改寫「configure.scan」文件,並將其重命名為「configure.in」,並使用autoconf文件生成configure文件。
接下來,筆者將通過一個簡單的hello.c例子帶領讀者熟悉autotools生成makefile的過程,由於在這過程中有涉及到較多的腳本文件,為了更清楚地了解相互之間的關系,強烈建議讀者實際動手操作以體會其整個過程。
1.autoscan
它會在給定目錄及其子目錄樹中檢查源文件,若沒有給出目錄,就在當前目錄及其子目錄樹中進行檢查。它會搜索源文件以尋找一般的移植性問題並創建一個 文件「configure.scan」,該文件就是接下來autoconf要用到的「configure.in」原型。如下所示:
[root@localhost automake]# autoscan
autom4te: configure.ac: no such file or directory
autoscan: /usr/bin/autom4te failed with exit status: 1
[root@localhost automake]# ls
autoscan.log configure.scan hello.c
如上所示,autoscan首先會嘗試去讀入「configure.ac」(同configure.in的配置文件)文件,此時還沒有創建該配置文件,於是它會自動生成一個「configure.in」的原型文件「configure.scan」。
2.autoconf
configure.in是autoconf的腳本配置文件,它的原型文件「configure.scan」如下所示:
# -*- Autoconf -*-
# Process this file with autoconf to proce a configure script.
AC_PREREQ(2.59)
#The next one is modified by sunq
#AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)
AC_INIT(hello,1.0)
# The next one is added by sunq
AM_INIT_AUTOMAKE(hello,1.0)
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
下面對這個腳本文件進行解釋:
· 以「#」號開始的行為注釋。
· AC_PREREQ宏聲明本文件要求的autoconf版本,如本例使用的版本2.59。
· AC_INIT宏用來定義軟體的名稱和版本等信息,在本例中省略了BUG-REPORT-ADDRESS,一般為作者的e-mail。
· AM_INIT_AUTOMAKE是筆者另加的,它是automake所必備的宏,也同前面一樣,PACKAGE是所要產生軟體套件的名稱,VERSION是版本編號。
· AC_CONFIG_SRCDIR宏用來偵測所指定的源碼文件是否存在,來確定源碼目錄的有
效性。在此處為當前目錄下的hello.c。
· AC_CONFIG_HEADER宏用於生成config.h文件,以便autoheader使用。
· AC_CONFIG_FILES宏用於生成相應的Makefile文件。
· 中間的注釋間可以添加分別用戶測試程序、測試函數庫、測試頭文件等宏定義。
接下來首先運行aclocal,生成一個「aclocal.m4」文件,該文件主要處理本地的宏定義。如下所示:
[root@localhost automake]# aclocal
再接著運行autoconf,生成「configure」可執行文件。如下所示:
[root@localhost automake]# autoconf
[root@localhost automake]# ls
aclocal.m4 autom4te.cache autoscan.log configure configure.in hello.c
3.autoheader
接著使用autoheader命令,它負責生成config.h.in文件。該工具通常會從「acconfig.h」文件中復制用戶附加的符號定義,因此此處沒有附加符號定義,所以不需要創建「acconfig.h」文件。如下所示:
[root@localhost automake]# autoheader
4.automake
這一步是創建Makefile很重要的一步,automake要用的腳本配置文件是Makefile.am,用戶需要自己創建相應的文件。之後,automake工具轉換成Makefile.in。在該例中,筆者創建的文件為Makefile.am如下所示:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS= hello
hello_SOURCES= hello.c
下面對該腳本文件的對應項進行解釋。
· 其中的AUTOMAKE_OPTIONS為設置automake的選項。由於GNU(在第1章中已經有所介紹)對自己發布的軟體有嚴格的規范,比如必須附 帶許可證聲明文件COPYING等,否則automake執行時會報錯。automake提供了三種軟體等級:foreign、gnu和gnits,讓用 戶選擇採用,默認等級為gnu。在本例使用foreign等級,它只檢測必須的文件。
· bin_PROGRAMS定義要產生的執行文件名。如果要產生多個執行文件,每個文件名用空格隔開。
· hello_SOURCES定義「hello」這個執行程序所需要的原始文件。如果」hello」這個程序是由多個原始文件所產生的,則必須把它所用到的 所有原始文件都列出來,並用空格隔開。例如:若目標體「hello」需要「hello.c」、「sunq.c」、「hello.h」三個依賴文件,則定義 hello_SOURCES=hello.c sunq.c hello.h。要注意的是,如果要定義多個執行文件,則對每個執行程序都要定義相應的file_SOURCES。
接下來可以使用automake對其生成「configure.in」文件,在這里使用選項「—adding-missing」可以讓automake自動添加有一些必需的腳本文件。如下所示:
最上層的要寫明
AUTOMAKE_OPTIONS = foreign
如果這個目錄沒有要編譯的文件,只包含了子目錄,則只寫個
SUBDIRS = dir1
就ok了。 例如我的工程,最上層只是包含了源碼目錄,於是就寫了 AUTOMAKE_OPTIONS=foreign
SUBDIRS=src
如果有文件要編譯,則要指明target 先。比如我的src目錄底下既有文件,又有目錄,而src的這層目錄中的文件最後是要編譯成一個
可執行文件,則src目錄下的Makefile.am這么寫。
bin_PROGRAMS= myprogram
SUBDIRS= sub1
myprogram_SOURCES= \ a.cpp\ b.cpp\ # 要編譯的源文件。這兒的_SOURCES是關鍵字
EXTRA_DIST= \ a.h \ b.h
# 不用編成.o,但生成target myprogram也需要給編譯器處理的頭文件放這里
myprogram_LDADD = libsub1.a 這個_LDADD是關鍵字,
# 最後生成myprogram這個執行文件,還要link src/sub1這個目錄中的內容編成的一個lib :libsub1.a,
myprogram_LDFLAGS = -lpthread -lglib-2.0 -L/usr/bin $(all_libraries)
# myprogram還要link系統中的動態so,以此類推,需要連自編譯的so,也寫到這個關鍵字 _LDFLAGS後面就好了。
AM_CXXFLAGS = -D_LINUX
# 傳遞給g++編譯器的一些編譯宏定義,選項,
INCLUDES=-IPassport -Isub1/ -I/usr/include/glib-2.0\ -I/usr/lib/glib-2.0/include $(all_includes)
# 傳遞給編譯器的頭文件路徑。
下面是sub1種生成lib的Makefile.am
noinst_LIBRARIES = libprotocol.a # 不是生成可執行文件,而是靜態庫,target用noinst_LIBRARIES libprotocol_a_SOURCES = \ alib.cpp
EXTRA_DIST = mylib.h\ alib.h
INCLUDES= -I../ $(all_includes)
AM_CXXFLAGS = -D_LINUX -DONLY_EPOLL -D_SERVER
ok ,最後補上AC_PROG_RANLIB涵義,如果要自己生成lib,然後link到最終的可執行文件中,則要加上這個宏,否則不用。
2 一點討論 每個目錄至少都要有一個target,或者是可執行文件或者是lib,似乎對目錄的劃分帶來點局限。比如我的目錄結構如果是這樣 ./Src ./Src/sub1 ./Src/sub2 而我想這樣,sub1,sub2都沒有target,目錄劃分只是為了區別代碼的不同模塊,然後把兩個目錄中編譯出的中間文件一起link ,得到最後需要的 myprogram 。 似乎在Src/Makefile.am中要這么寫 myprogram_SOURCES = sub1/a.cpp \ sub2/b.cpp
[root@localhost automake]# automake --add-missing
configure.in: installing ''./install-sh''
configure.in: installing ''./missing''
Makefile.am: installing ''depcomp''
[root@localhost automake]# ls
aclocal.m4 autoscan.log configure.in hello.c Makefile.am missing
autom4te.cache configure depcomp install-sh Makefile.in config.h.in
可以看到,在automake之後就可以生成configure.in文件。
5.運行configure
在這一步中,通過運行自動配置設置文件configure,把Makefile.in變成了最終的Makefile。如下所示:
[root@localhost automake]# ./configure
可以看到,在運行configure時收集了系統的信息,用戶可以在configure命令中對其進行方便地配置。在./configure的自定 義參數有兩種,一種是開關式(--enable-XXX或--disable-XXX),另一種是開放式,即後面要填入一串字元(--with- XXX=yyyy)參數。讀者可以自行嘗試其使用方法。另外,讀者可以查看同一目錄下的」config.log」文件,以方便調試之用。
到此為止,makefile就可以自動生成了。回憶整個步驟,用戶不再需要定製不同的規則,而只需要輸入簡單的文件及目錄名即可,這樣就大大方便了用戶的使用。下面的圖3.9總結了上述過程:
圖3.9 autotools生成Makefile流程圖
使用autotools所生成的Makefile
autotools生成的Makefile除具有普通的編譯功能外,還具有以下主要功能(感興趣的讀者可以查看這個簡單的hello.c程序的makefile):
1.make
鍵入make默認執行」make all」命令,即目標體為all,其執行情況如下所示:
[root@localhost automake]# make
此時在本目錄下就生成了可執行文件「hello」,運行「./hello」能出現正常結果,如下所示:
[root@localhost automake]# ./hello
Hello!Autoconf!
2.make install
此時,會把該程序安裝到系統目錄中去,如下所示:
[root@localhost automake]# make install
if Gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"hello\" -DVERSION=\"1.0\" -I. -I. -g -O2 -MT hello.o -MD -MP -MF ".deps/hello.Tpo" -c -o hello.o hello.c; \
then mv -f ".deps/hello.Tpo" ".deps/hello.Po"; else rm -f ".deps/hello.Tpo"; exit 1; fi
Gcc -g -O2 -o hello hello.o
make[1]: Entering directory ''/root/workplace/automake''
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
/usr/bin/install -c ''hello'' ''/usr/local/bin/hello''
make[1]: Nothing to be done for ''install-data-am''.
make[1]: LeaVing directory ''/root/workplace/automake''
此時,若直接運行hello,也能出現正確結果,如下所示:
[root@localhost automake]# hello
Hello!Autoconf!
3.make clean
此時,make會清除之前所編譯的可執行文件及目標文件(object file, *.o),如下所示:
[root@localhost automake]# make clean
test -z "hello" || rm -f hello
rm -f *.o
4.make dist
此時,make將程序和相關的文檔打包為一個壓縮文檔以供發布,如下所示:
[root@localhost automake]# make dist
[root@localhost automake]# ls hello-1.0-tar.gz
hello-1.0-tar.gz
可見該命令生成了一個hello-1.0-tar.gz的壓縮文件。
由上面的講述讀者不難看出,autotools確實是軟體維護與發布的必備工具,也鑒於此,如今GUN的軟體一般都是由automake來製作的。
沒用過,我也是轉載的
H. 如何編譯OpenWrt
首先是
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev
然後是下載源碼
TRUNK版的是
svn checkout svn://svn.openwrt.org/openwrt/trunk
cd trunk
./scripts/feeds update -a
./scripts/feeds install -a
DREAMBOX版的是
svn co svn://svn.openwrt.org.cn/dreambox/backfire openwrt-dreambox
cd openwrt-dreambox
./scripts/feeds update -a
./scripts/feeds install -a
然後就是make menuconfig
我以841n v3做例子,編個帶USB離線下載的固件
841的USB是改出來的所以直接編譯是沒有USB的
下面添加USB支持
打開trunk/target/linux/ar71xx/files/arch/mips/ath79
貌似841n v3用的是mach-tl-wr941nd.c而不是mach-tl-wr841nd.c保險起見我兩個都換
最後是把蛋疼的無線開啟,atheros的網卡需要改package/mac80211/files/lib/wifi/mac80211.sh和package/madwifi/files/lib/wifi/madwifi.sh,拉到最下有個蛋疼的
option disable 1
把1改為0就OK