2017-01-16 4 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

Смежные вопросы