簡體   English   中英

針對靜態或動態庫編譯c ++鏈接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM