[英]compiling c++ linking against static or dynamic library
使用以下命令編譯程序時,是否要鏈接到靜態庫或動態庫?
g++ blink.cpp -o blink -lmraa
其次,使用以下命令從PPA“安裝”了該庫
sudo add-apt-repository ppa:mraa/mraa
sudo apt-get update
sudo apt-get install libmraa1 libmraa-dev mraa-tools python-mraa python3-mraa
您如何判斷該庫是靜態的還是動態的?
使用以下命令編譯程序時,是否要鏈接到靜態庫或動態庫?
見man ld
:
-l名稱規范
--library = namespec
將namespec指定的歸檔文件或目標文件添加到要鏈接的文件列表中。 此選項可以使用多次。 如果namespec的格式為:filename,則ld將在庫路徑中搜索名為filename的文件,否則將在庫路徑中搜索名為libnamespec.a的文件。
在支持共享庫的系統上,ld可能還會搜索libnamespec.a以外的文件。 具體來說,在ELF和SunOS系統上,ld將在目錄中搜索名為libnamespec.so的庫,然后再搜索一個名為libnamespec.a的庫。 (按照慣例,擴展名“ .so”表示共享庫。)請注意,此行為不適用於:filename,它始終指定一個名為filename的文件。
Linux是ELF系統。 因此,鏈接器首先搜索.so
,然后搜索.a
。
您如何判斷該庫是靜態的還是動態的?
它可以是兩個,胸圍最有可能的.so
。 您需要查看哪些文件包含那些軟件包。
您還可以在生成的可執行文件或共享庫上調用ldd <executable>
,並查看所需的共享庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.