2017-01-16 90 views
0

当您使用以下命令编译程序时,您是针对静态库还是动态库进行链接?编译针对静态或动态库的C++链接

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 

你怎么能告诉我们,如果库是静态的还是动态的“装”?

回答

0

当您使用以下命令编译程序时,您是在链接静态还是动态库?

man ld

-l namespec

--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>生成的可执行文件或共享库,并查看它需要哪些共享库。

+0

非常感谢您的帮助 – scalauser