Я хочу знать, что произошло, когда я использую команду "g ++ -o main main.o -L <directory>-l <lib_name>" - PullRequest
0 голосов
/ 26 апреля 2019

Предположим, у меня есть main.c main.o libheymath.so в текущем каталоге.Я хочу связать их вместе, чтобы создать исполняемый файл.Я использую команду "g ++ -o main main.o -L./ -lheymath" , чтобы понять это.Но я не знаю, почему мне следует указывать каталог и имя библиотеки.Насколько я знаю, когда я запускаю "./ main" , система загружает общую библиотеку в память в определенных каталогах, таких как / lib и / use / lib и каталоги, указанные в LD_LIBRARY_PATH и т. Д., Но не то, что я указал.Так в чем же цель "- L. / -lheymath" ?

файлов рабочих каталогов:

main.c, main.o,libheymath.so

команда:

g ++ -o main main.o -L ./ -lheymath

. / main

1 Ответ

0 голосов
/ 26 апреля 2019

-L позволяет указать путь для поиска библиотек во время компоновки (он не «сохраняется» в создаваемом исполняемом файле для повторного использования при запуске исполняемого файла)

-l указывает библиотеку, с которой вы хотите связать, это позволяет проверить, отсутствуют ли некоторые символы или нет, и узнать список библиотек, которые нужно загрузить, когда вы запустите исполняемый файл.

Когда вы связываете путь этих библиотек, они не сохраняются в исполняемом файле, так как и исполняемый файл, и библиотеки могут быть перемещены после ссылки (и могут быть установлены на другом хосте)

Примечание LD_LIBRARY_PATH используется при запуске исполняемого файла для поиска динамических библиотек, не используется при связывании объектов / библиотек для создания исполняемого файла

...