日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态so库的链接:运行时链接和编译时链接

發布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态so库的链接:运行时链接和编译时链接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?? ?? 在編寫Makefile時,如果一個程序需要鏈接so庫,則需要通過兩個步驟來完成,分為運行時動態庫的鏈接和編譯時動態庫的鏈接,缺一不可。

???????

1、運行時動態庫的鏈接

在執行可執行文件時,提示:

error while loading shared libraries: libprint.so: cannot open shared object file: No such file or directory

解決:有三種方法

1)將 libprint.so放入系統庫或用戶庫目錄下:

sudo cp libprint.so /usr/local/lib sudo ldconfig

2)在makefile中添加: -Wl,-rpath

LDFLAGS = -lm -lprint -L$(TOP_PATH)/lib -Wl,-rpath=$(TOP_PATH)/lib

說明:
gcc編譯鏈接動態庫時,很有可能編譯通過但是執行時,找不到動態鏈接庫,那是因為-L選項指定的路徑只在編譯時有效,編譯出來的可執行文件不知道-L選項后面的值,當然找不到。
解決方法是通過-Wl,rpath=,使得execute記住鏈接庫的位置

3)使用LD_LIBRARY_PATH

推薦使用方法一。


2、編譯時鏈接

LDFLAGS

鏈接器參數,如指定庫位置:

LDFLAGS=-L/usr/lib -L/path/to/your/lib

LIBS

告訴鏈接器要鏈接哪些庫文件,如:

LIBS = -lpthread -liconv 最正規的做法: LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -lmysqlclient -liconv

因為LIBS不是makefile的自帶變量,屬于用戶自定義變量。

總結

以上是生活随笔為你收集整理的动态so库的链接:运行时链接和编译时链接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。