簡述linux中動態庫和靜態庫的制作調用流程

假設現在有這些文件:sub.c add.c div.c mul.c mainc head.h(前4個.C文件的頭文件)
1.靜態庫制作流程
? ? ? ? gcc -c ?sub.c add.c div.c mul.c ? ? ? ? ? ? ? -->生成 .o目標文件文件
? ? ? ? ar rcs ?libmycal.a ?*.o ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-->生成.a靜態庫文件(靜態庫的名字構成:lib+你要做的庫+.a)
2.調用靜態庫流程
? ? ? ?方法1) gcc ?main.c -I(大寫的i) ?./ ?libmycal.a -o ?sum ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -->生成可執行文件 sum?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? -->(具體格式:gcc+main函數+-I(頭文件路徑)+靜態庫+(-o+指定生成可執行文件名字)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (括號內的可以不加,默認生成a.out文件? )? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ./sum ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -->得到計算結果?
? ? ? 方法 2)gcc ?main.c -L ./ ?-l(小寫的L) mycal ?-I(大寫的i) ./ -o sum ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-->具體格式:-L+后面接靜態庫的路徑 ?-l+接靜態庫的名字(你自己定義的庫的名字)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-I+頭文件路徑 -o+指定生成的可執行文件 (同上)
? ? ? ? ? ? ? ? ./sum
3.動態庫的制作流程:
? ? ? ? gcc -fPIC ?sub.c add.c div.c mul.c ? ? ? ? ? ? ? -->生成 .o目標文件文件
? ? ? ? gcc -shared -o libmycal.so *.o ? ? ? ? ? ? ? ? ? ?-->生成動態庫.so文件
4.調用動態庫
? ? ? ?gcc main.c -L ./ ?-l mycal -I ./ -o sum ? ? ? ? ?-->出現調用失敗
5.調用失敗的原因:
? ? ? ?沒有讓main.c和動態庫建立連接;
6.解決辦法
? ? ? ?方法1:使用臨時的動態庫環境變量連接:export LD_LIBRARY_PATH=./(動態庫所在目錄) ? 重啟linux之后失效
? ? ? ?方法2:用vi/vim打開動態庫配置文件:vim /etc/ld.so.conf ? ?在文本中添加動態庫的絕對路徑 ? 然后再用 sudo(使用root權限)idconfig (-v顯示更新信息)更新即可 ?永久有效

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382363.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382363.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382363.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

redis源碼剖析(八)—— 當你啟動Redis的時候,Redis做了什么

文章目錄啟動過程初始化server結構體main函數會調用initServer函數初始化服務器狀態載入持久化文件,還原數據庫開始監聽事件流程圖啟動過程 初始化server結構體從配置文件夾在加載參數初始化服務器載入持久化文件開始監聽事件 初始化server結構體 服務器的運行ID…

linux中錯誤總結歸納

1.使用gcc編譯C文件,C文件在for循環語句中出現變量定義 編譯器提示錯誤:“for”loop initial declarations are only allowed in C99 mode. note:use option -stdc99or-stdgnu99 to compile; 原因:gcc的標準是基于c89的,c89不能在…

redis源碼剖析(十一)—— Redis字符串相關函數實現

文章目錄初始化字符串字符串基本操作字符串拼接操作other獲取指定范圍里的字符串將字符串中的所有字符均轉為小寫的形式將字符串中所有字符均轉為大寫的形式字符串比較other#define SDS_ABORT_ON_OOM#include "sds.h" #include <stdio.h> #include <stdlib.…

makefile內容小結

makefile中每個功能主要分為三部分&#xff1a;目標&#xff0c;依賴條件和命令語句 1.支持對比更新的Makefile寫法&#xff08;只會編譯文件時.o文件和.c文件時間不一致的文件&#xff09; 2.使用makefile自動變量和自定義變量的makefile寫法 其中&#xff1a;這三個符號為ma…

事務隔離級別動圖演示

事務的基本要素&#xff08;ACID&#xff09; 原子性&#xff08;Atomicity&#xff09; 事務開始后所有操作&#xff0c;要么全部做完&#xff0c;要么全部不做&#xff0c;不可能停滯在中間環節。事務執行過程中出錯&#xff0c;會回滾到事務開始前的狀態&#xff0c;所有的…

C/C++的優點和缺點

1.C/C語言的優點 C語言是面向過程的語言&#xff0c;常用來編寫操作系統。C語言是從C語言發展過來的&#xff0c;是一門面向對象的語言&#xff0c;它繼承了C語言的優勢&#xff0c;同時也添加了三個主要的內容&#xff1a;Oriented-Object class,Template,STL. 1)C/C可以潛入…

C/C++命令行參數那點事

int main(int argc, char *argv[ ]); 1.命令行參數&#xff1a;在命令行中給定的參數&#xff1b; 2.命令行參數在對函數main的調用時&#xff0c;主要有兩個參數送到main,一個是argc(argument count),命令行參數的個數&#xff0c;另外一個是argv,命令行參數的數組,命令行參…

mysql row_id為什么是6字節?為什么是8字節

mysql row_id是幾個字節&#xff1f; row_id InnoDB表中在沒有默認主鍵的情況下會生成一個6字節空間的自動增長主鍵 row_id是整型還是字符型&#xff1f; 源代碼中 row_id 是 ib_uint64_t 這是 8字節 uint64_t 是整形 為什么是6個字節&#xff1f; P.S. Base64編碼說明 B…

linux中的man文檔結構

使用命令 man chapter章節號查找的內容

偽隨機數和真隨機數

偽隨機數小項目 猜數字游戲 //C語言 猜數字游戲 https://blog.csdn.net/csdn_kou/article/details/79785709 C語言之隨機數生成超詳解 https://blog.csdn.net/csdn_kou/article/details/79788815 在上面的文章中&#xff0c;使用固定函數就一直是生成固定的隨機結果&#…

linux中的IO函數

1)open函數&#xff1a;以特定的方式打開一個文件&#xff1b; 頭文件&#xff1a;sys/type.h sys/stat.h fcntl.h 返回值&#xff1a;錯誤則返回-1&#xff0c;正確則返回文件描述符&#xff08;int類型&#xff0c;范圍為3~1023,文件的標號&#xff09; 函數原型&#xff…

ps -ef和ps aux

ps -ef和ps aux ps -ef unix風格 -e 列出所有進程 -f 完整格式 UID PID PPID C STIME TTY TIME CMD root 1 0 0 8月27 ? 00:25:08 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 8月…

Linux中screen的用法

screen 查看當前有多少窗口 [rootpython ~]# screen -ls There are screens on:20706.khz (Attached)20679.khz (Attached)20453.khz (Attached)20143.khz (Detached)16993.pts-2.python (Attached) 5 Sockets in /var/run/screen/S-root.新建一…

linux文件操作相關函數

&#xff08;1&#xff09;stat函數&#xff1a;顯示文件的相關信息&#xff08;類似于 ls -l的感覺&#xff09; 頭文件及函數原型&#xff1a; 函數參數:path:文件的路徑&#xff0c;buf是指待寫入的文件信息&#xff0c;fd:表示文件描述符&#xff1b; stat,fstat,lstat三者…

linux查看硬盤是不是ssd固態硬盤

linux查看硬盤是不是ssd固態硬盤 sdb是ssd、sr0是SATA [root 01 ~]# cat /sys/block/sdb/queue/rotational 0 [root 01 ~]# cat /sys/block/sr0/queue/rotational 1

linux目錄操作函數

&#xff08;1&#xff09;chdir函數&#xff1a;修改當前進程的路徑 函數頭文件及原型&#xff1a; 參數&#xff1a;要修改的文件路徑或文件描述符&#xff08;一般是當前空閑最小的&#xff09; 返回值&#xff1a;成功&#xff08;0&#xff09;&#xff0c;失敗&#xff0…

linux中的dup和fcntl的用法

&#xff08;1&#xff09;dup函數&#xff1a;文件描述符的拷貝 函數頭文件及函數原型&#xff1a; 參數&#xff1a;原來的文件描述符&#xff0c;新的文件描述符&#xff0c;標志位&#xff1b; 返回值&#xff1a;成功&#xff08;返回新的文件描述符&#xff09;失敗&…

^M

為什么打開文件有^M 計算機還沒有出現之前&#xff0c;有一種叫做電傳打字機&#xff08;Teletype Model 33&#xff09;的玩意&#xff0c;每秒鐘可以打10個字符。但是它有一個問題&#xff0c;就是打完一行換行的時候&#xff0c;要用去0.2秒&#xff0c;正好可以打兩個字符…

使用dup2實現重定向到屏幕終端遇到問題

參考博客&#xff1a;https://blog.csdn.net/qq_26093511/article/details/53255970 參考博客&#xff1a;https://blog.csdn.net/db199410/article/details/52335450#commentBox 1.要解決的問題 通過復制文件描述符來實現文件重定向問題。 2.實現代碼 2.代碼輸出 按照原來的…

redis源碼剖析(十二)—— RDB持久化

文章目錄RBD文件載入RDB文件分析源碼分析核心代碼rdb文件寫入rdb寫入關鍵函數rdbSaveObjectTyperdbSaveStringObjectRawrdbSaveLongLongAsStringObject為避免數據丟失。將redis中的數據保存到磁盤中&#xff0c;避免數據意外丟失。 RBD文件載入 在redis啟動時檢測是否有rdb文件…