国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Linux操作系統下源碼編譯安裝軟件

不知名網友 / 2641人閱讀

摘要:源碼編譯安裝一般情況下,如果我們在下運行一個軟件的話,需要先安裝。現在這里主要講源碼編譯安裝首先源碼是由語言編寫的,但是語言是高級語言,機器無法識別語言代碼。通常這個偵測程序文件名為或者。表示編譯的目標文件。

源碼編譯安裝

一般情況下,如果我們在linux下運行一個軟件的話,需要先安裝。比如運行PHP軟件的話,可以使用apt-get install php命令安裝,或者編譯安裝php的源碼,然后運行。
現在這里主要講源碼編譯安裝
首先php源碼是由c語言編寫的,但是C語言是高級語言,機器無法識別C語言代碼。現在需要將C語言代碼翻譯成Linux能看懂的binary file(二進制文件),這個翻譯工作需要由編譯器來完成翻譯。
在編譯過程中,還有產生所謂的目標文件(Object file),這些文件以 .o的附文件名存在。至于C的源碼文件則以 .c作為存儲文件。有時候我們需要在程序中調用其他外部子程序,或者調用其他的套件提供的函數功能,只是很需要在編譯過程中,將該函式庫都加進來,這樣,編譯器就可以將所有的程序代碼與函式庫作為一個連接(Link)以產生正確的執行檔
(linux核心提供了很多核心相關的函式庫與外部和參數,這些信息大多放在/usr/include,/lib,/usr/lib)
編譯器翻譯完成之后就有了二進制文件 如果被編譯的程序是大型軟件比如nginx,apache之類的源程序,使用gcc一條條編譯指令輸入的話不現實。 可以使用make命令,make會在當前目錄中找到Makefile(或者makefile)文件,makefile文件中記錄了源碼如何編譯的詳細信息 makefile文件通常是,軟件開發商都會寫一個偵測測序來偵測使用者的作業環境,以及該作業環境是否有軟件開發商所需要的其他功能,該偵測程序 偵測完畢后,就會主動建立這個makefile的規則檔案。通常這個偵測程序文件名為configure或者config。
所以一般都是先執行 configure檢測作業環境,生成makefile,然后再執行make進行編譯。例如:

cd php-5.5.10/
./configure --prefix=/usr/local/php --with-config-file-path=/etc/php --enable-fpm --enable-pcntl --enable-mysqlnd --enable-opcache --enable-sockets --enable-sysvmsg --enable-sysvsem  --enable-sysvshm --enable-shmop --enable-zip --enable-ftp --enable-soap --enable-xml --enable-mbstring --disable-rpath --disable-debug --disable-fileinfo --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pcre-regex --with-iconv --with-zlib --with-mcrypt --with-gd --with-openssl --with-mhash --with-xmlrpc --with-curl --with-imap-ssl
sudo make
sudo make install
sudo cp php.ini-development /etc/php/
makefile.am文件解析

下面是memcached的makefile.am文件內容:

# 表示指定要生成的可執行應用程序文件,這表示可執行文件在安裝時需要被安裝到系統中。PROGRAMS知道這是一個可執行文件。client表示編譯的目標文件。bin表示目錄文件被安裝到系統的目錄。
bin_PROGRAMS = memcached    

pkginclude_HEADERS = protocol_binary.h

# 表示指定要生成的可執行應用程序文件,只是想編譯,不想被安裝到系統中
noinst_PROGRAMS = memcached-debug sizes testapp timedrun
BUILT_SOURCES=
testapp_SOURCES = testapp.c util.c util.h
timedrun_SOURCES = timedrun.c

# 表示生成可執行應用程序所用的源文件,其中main()函數在memcached.c中
memcached_SOURCES = memcached.c memcached.h 
                    hash.c hash.h 
                    jenkins_hash.c jenkins_hash.h 
                    murmur3_hash.c murmur3_hash.h 
                    slabs.c slabs.h 
                    items.c items.h 
                    assoc.c assoc.h 
                    thread.c daemon.c 
                    stats.c stats.h 
                    util.c util.h 
                    trace.h cache.h sasl_defs.h 
                    bipbuffer.c bipbuffer.h 
                    logger.c logger.h 
                    crawler.c crawler.h 
                    itoa_ljust.c itoa_ljust.h

# BUILD_CACHE在configure.ac中有定義,需要額外增加編譯所需源文件
if BUILD_CACHE
memcached_SOURCES += cache.c
testapp_SOURCES += cache.c
endif

# BUILD_SOLARIS_PRIVS在configure.ac中有定義,需要額外增加編譯所需源文件
if BUILD_SOLARIS_PRIVS
memcached_SOURCES += solaris_priv.c
endif

# ENABLE_SASL在configure.ac中有定義,需要額外增加編譯所需源文件
if ENABLE_SASL
memcached_SOURCES += sasl_defs.c
endif

# memcached_debug使用的編譯源文件和memcached一樣
memcached_debug_SOURCES = $(memcached_SOURCES)

# 這和Makefile文件中一樣,表示C語言預處理器參數,這里指定了DCONFIG_DIR,以后在程序中,就可以直接使用CONFIG_DIR,不要把這個和另一個CFLAGS混淆,后者表示編譯器參數
memcached_CPPFLAGS = -DNDEBUG

# 連接時所需要的庫文件
memcached_debug_LDADD = @PROFILER_LDFLAGS@
memcached_debug_CFLAGS = @PROFILER_FLAGS@

memcached_LDADD =
memcached_DEPENDENCIES =
memcached_debug_DEPENDENCIES =
CLEANFILES=

if BUILD_DTRACE
BUILT_SOURCES += memcached_dtrace.h
CLEANFILES += memcached_dtrace.h
endif

if DTRACE_INSTRUMENT_OBJ
memcached_LDADD += memcached_dtrace.o
memcached_DEPENDENCIES += memcached_dtrace.o
memcached_debug_LDADD += memcached_debug_dtrace.o
memcached_debug_DEPENDENCIES += memcached_debug_dtrace.o
CLEANFILES += memcached_dtrace.o memcached_debug_dtrace.o
endif

memcached_dtrace.h: memcached_dtrace.d
    ${DTRACE} -h -s memcached_dtrace.d
    sed -e "s,void *,const void *,g" memcached_dtrace.h | 
            sed -e "s,char *,const char *,g" | tr "	" " " > mmc_dtrace.tmp
    mv mmc_dtrace.tmp memcached_dtrace.h

memcached_dtrace.o: $(memcached_OBJECTS)
    $(DTRACE) $(DTRACEFLAGS) -G -o memcached_dtrace.o -s ${srcdir}/memcached_dtrace.d $(memcached_OBJECTS)

memcached_debug_dtrace.o: $(memcached_debug_OBJECTS)
    $(DTRACE) $(DTRACEFLAGS) -G -o memcached_debug_dtrace.o -s ${srcdir}/memcached_dtrace.d $(memcached_debug_OBJECTS)


SUBDIRS = doc
DIST_DIRS = scripts
EXTRA_DIST = doc scripts t memcached.spec memcached_dtrace.d version.m4 README.md LICENSE.bipbuffer

MOSTLYCLEANFILES = *.gcov *.gcno *.gcda *.tcov

test:    memcached-debug sizes testapp
    $(srcdir)/sizes
    $(srcdir)/testapp
    prove $(srcdir)/t
    @if test `basename $(PROFILER)` = "gcov"; then 
      for file in memcached_debug-*.gc??; do 
        mv -f $$file `echo $$file | sed "s/memcached_debug-//"`; 
      done && 
      for file in *.gcda; do 
        srcfile=`echo $$file | sed "s/.gcda/.c/"`; 
        if test -n "`echo $(memcached_debug_SOURCES) | grep $$srcfile`"; then 
          echo `$(PROFILER) $$srcfile` | sed "s/"$$srcfile":.*//"; 
        fi 
      done 
    elif test `basename $(PROFILER)` = "tcov"; then 
      files=`grep SRCFILE memcached-debug.profile/tcovd | sed "s/SRCFILE://" | sort | uniq` && 
      $(PROFILER) -x memcached-debug.profile $$files 2>&1; 
      for file in *.tcov; do 
        srcfile=`echo $$file | sed "s/.tcov//"`; 
        if test -n "`echo $(memcached_debug_SOURCES) | grep $$srcfile`"; then 
          echo $$srcfile : `grep "Percent of the file executed" $$file`; 
        fi 
      done 
    else :; fi

docs:
    (cat Doxyfile ; echo "PROJECT_NUMBER=`cat version.num`") | doxygen -

dist-hook:
    rm -f $(distdir)/*/*~ $(distdir)/t/lib/*~ $(distdir)/*~

maintainer-clean-local:
    -rm Makefile.in
    -rm aclocal.m4
    -rm config.guess
    -rm config.sub
    -rm depcomp
    -rm install-sh
    -rm ltmain.sh
    -rm missing
    -rm configure
    -rm config.log
    -rm config.status

參考資料:
《鳥哥的Linux私房菜》
http://blog.csdn.net/zmxiangd...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61716.html

相關文章

發表評論

0條評論

不知名網友

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<