1. 程式人生 > >編譯動態庫和靜態庫的Makefile模板

編譯動態庫和靜態庫的Makefile模板

# 1、準備工作,編譯方式、目標檔名、依賴庫路徑的定義。
CC = gcc
CFLAGS  := -w -g -Wall

LIB = libltkc.so 

HDRS = \
    version.inc     \
    ltkc.h          \
    ltkc_base.h     \
    ltkc_connection.h   \
    ltkc_frame.h        \
    ltkc_platform.h     \
    ltkc_xmltext.h      \


OBJS = \
    ltkc_array.o        \
    ltkc_connection.o
\ ltkc_element.o \ ltkc_encdec.o \ ltkc_error.o \ ltkc_framedecode.o \ ltkc_frameencode.o \ ltkc_frameextract.o \ ltkc_hdrfd.o \ ltkc_xmltextencode.o \ ltkc_xmltextdecode.o \ ltkc_typeregistry.o \ INC= -I /usr/include/libxml2 # 依賴的lib名稱
# DEPEND_ON_LIB = -lxmlllrp -lxml2 DEPEND_ON_LIB = -lxml2 all : $(LIB) # 2. 生成.o檔案 %.o:%.c $(CC) $(CFLAGS) -c $< -o [email protected] $(INC) $(DEPEND_ON_LIB) @echo "-----" # 3. 生成動態庫檔案 $(LIB):$(OBJS) $(CC) $(CFLAGS) -shared -o [email protected] $(OBJS) # 4. 刪除中間過程生成的檔案
clean: rm -f $(OBJS) $(TARGET) $(LIB)

測試動態庫

1、在測試過程中,經常會報錯:找不到.so檔案。一種簡單的解決方法如下:

cannot open shared object file: No such file or directory

在linux終端輸入如下命令:

export LD_LIBRARY_PATH=/home/shaoxiaohu/lib:LD_LIBRARY_PATH:

更多解決方法可參考:Linux下gcc編譯生成動態連結庫*.so檔案並呼叫它的第4部分。

相關推薦

編譯動態靜態Makefile模板

# 1、準備工作,編譯方式、目標檔名、依賴庫路徑的定義。 CC = gcc CFLAGS := -w -g -Wall LIB = libltkc.so HDRS = \ versi

QtEmbedded-4.8.6-arm 編譯選擇從 動態變化到靜態 時,生成的Makefile連結路徑下如果有動態靜態,優先選擇動態編譯應用

問題:QtEmbedded-4.8.6-arm 編譯選擇從 動態庫到靜態庫 時,發現的一個疑惑:,生成的Makefile連結庫路徑下如果有動態庫和靜態庫,優先選擇動態庫編譯應用 具體現象: 我最初是使用動態庫的 QtEmbedded-4.8.6-arm (編譯器選擇時,是 ./co

Linux下用Makefile製作動態靜態編譯生成可執行程式

Makefile 一個工程中的原始檔不計其數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新

Linux下RabbitMQ的編譯,生成動態靜態

執行 編譯 ast lin 目錄 off href apt-get span 一、步驟 1、代碼托管處下載代碼 最新:https://github.com/alanxz/rabbitmq-c/archive/master.zip 穩定:https://g

編譯時混合使用動態靜態

         編譯某個測試程式碼時,出現了下面的錯誤:# g++ -std=c++11 -o testlurkcli main.cpp -L. -llurkcli-lasl -static /us

linux下g++ 編譯動態靜態的連結標頭檔案問題

原來編譯的時候都是用的很隨意,沒用系統的總結一下,這幾天在編譯的時候遇到一些下問題,於是就總結一下,省得過幾天又給忘了。 1.動態庫和靜態庫簡介 靜態庫在程式連結的時候會自動的連結到程式裡,所以一旦編譯完成,靜態庫就不需要了,靜態庫以.a結尾。  動態庫在編譯時不會被連線到目的碼中,而是在程式執行

gcc編譯工具生成動態靜態之一----介紹

 1.庫的分類 根據連結時期的不同,庫又有靜態庫和動態庫之分。 靜態庫是在連結階段被連結的(好像是廢話,但事實就是這樣),所以生成的可執行檔案就不受庫的影響了,即使庫被刪除了,程式依然可以成功執行。 有別於靜態庫,動態庫的連結是在程式執行的時候被連結的。所以,即使程式編譯完,庫仍須保留在系統上

自己在linux上編譯、連結、動態靜態的學習筆記

在平常的專案中,我們都是使用公司要求的makefile、makedebug一類的檔案,因此,在編譯、連結、生成和連結動態庫與靜態庫的時候,我們只是簡單的使用一些已經設定的變數,只是簡單的修改、新增一些檔名,或許這次我們編譯通過了,但是,在某一個時候,可能出現了一個問題,無論

linux下動態靜態的製作、尋找、比較及相關Makefile的編寫

一.庫的定義 什麼是庫,在windows平臺和linux平臺下都大量存在著庫。 本質上來說庫是一種可執行程式碼的二進位制形式,可以被作業系統載入記憶體執行。 由於windows和linux的本質不同,

gcc編譯工具生成動態靜態

來自:http://www.cnblogs.com/fnlingnzb-learner/ 1.庫的分類根據連結時期的不同,庫又有靜態庫和動態庫之分。靜態庫是在連結階段被連結的(好像是廢話,但事實就是這樣),所以生成的可執行檔案就不受庫的影響了,即使庫被刪除了,程式依然可以成功執行。有別於靜態庫,動態庫的連結是

動態靜態

linu not fine 執行文件 port pic 靜態庫 可執行 生成可執行文件 前提:本文是基於Linux系統下的編程與學習 補充:頭文件衛士,避免頭文件重復包含。 //頭文件衛士 #ifndef __HEAD_H__ #define __HEAD_H__ //頭

iOS裡的動態靜態

介紹 動態庫形式:.dylib和.framework 靜態庫形式:.a和.framework 動態庫和靜態庫的區別 靜態庫:連結時,靜態庫會被完整地複製到可執行檔案中,被多次使用就有多份冗餘拷貝(圖1所示) 系統動態庫:連結時不復制,程式執行時由系統動態

Linux 動態靜態

Linux作業系統中,依據函式庫是否被編譯到程式內部,將其分為兩大類,靜態函式庫和動態函式庫。 Linux下的函式庫放在/lib或/usr/lib,標頭檔案放在/usr/include。 在既有靜態庫又有動態庫的情況下,預設使用動態庫,如果強制使用靜態庫則需要加-static選項支援。

Linux中的動態靜態(.a.la.so.o)

​ Linux中的動態庫和靜態庫(.a/.la/.so/.o) 原文地址:https://www.cnblogs.com/findumars/p/5421910.html 在windows下,一般可以通過檔案的字尾名來識別檔案的型別。在Linux下大致上也是可以的。但是要明

Linux下動態靜態的連結

一、檢視連結了哪些指令 ldd 程式名字 二、在應用程式需要連線外部庫的情況下,linux預設對庫的連線是使用動態庫,在找不到動態庫的情況下再選擇靜態庫。使用方式為: gcc test.cpp -L. -ltestlib 如果當前目錄有兩個庫libtestlib.

Linux下怎麼建立動態靜態

前言 linux下的生成的動態庫和靜態庫沒有windows下方便 linux下gcc編譯預設動態連結和release 程式執行後呼叫動態庫 動態庫: 程式在執行的時候才去連結動態庫的程式碼,多個程式

Linux系統的動態靜態

靜態庫 靜態庫:一些公共程式碼是需要反覆使用,就把這些程式碼編譯為“庫”檔案;在連結步驟中,聯結器將從庫檔案取得所需的程式碼,複製到生成的可執行檔案中的這種庫。 程式編譯一般需經預處理、編譯、彙編和連結幾個步驟。靜態庫特點是可執行檔案中包含了庫程式碼的一份完整拷貝;缺點就是被多次

gcc中動態靜態的連結順序

so檔案:動態庫 a檔案: 靜態庫 exe檔案:可執行程式(linux下以檔案屬性來標示是否是可執行檔案,與字尾名無關) gcc中連結順序問題,總結出以下幾點: 1,動態庫中可以包含另一個靜態庫,通過引數 -lxxx 把靜態庫libxxx.a加入so檔案中,這樣so檔案中 &nbs

【Qt】Qt動態靜態的建立使用

動態庫(共享庫)的建立 在Qt Creator中新建專案,選擇Library 點選“Choose”進入下一步 選擇建立庫的型別:共享庫 選擇Kit套件 選擇需要的模組 配置工程路徑、名字等 Qt Creator自動建立的檔案

使用objdump檢視動態靜態中具有哪些函式

 我們在 Linux 下執行一個程式,有時會無法啟動,報缺少某某庫。這時需要檢視可執行程式或者動態庫中的符號表,動態庫的依賴項, Linux 有現成的工具可用:objdump 。 objdump 是 gcc 套件中用來檢視 ELF 檔案的工具,具體詳細用法不進行介紹,此