編譯動態庫和靜態庫的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 檔案的工具,具體詳細用法不進行介紹,此