Различные способы указания библиотек для gcc / g ++ - PullRequest
5 голосов
/ 29 марта 2010

Мне было бы любопытно понять, есть ли существенная разница в указании библиотек (как общих, так и статических) для gcc / g ++ двумя следующими способами (CC может быть g ++ или gcc)

CC -o output_executable /path/to/my/libstatic.a /path/to/my/libshared.so source1.cpp source2.cpp ... sourceN.cpp

против

CC -o output_executable -L/path/to/my/libs -lstatic -lshared source1.cpp source2.cpp ... sourceN.cpp

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

Andrea.

1 Ответ

5 голосов
/ 30 марта 2010

Хорошо, я могу ответить самому себе, основываясь на некоторых экспериментах и ​​более глубоком прочтении документации gcc:

Из документации gcc: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

[...] Компоновщик обрабатывает архивный файл, просматривая его на наличие элементов, которые определяют символы, на которые до сих пор ссылались, но не определяли. Но если найденный файл является обычным объектным файлом, он связывается обычным способом. Единственная разница между использованием параметра -l и указанием имени файла заключается в том, что -l окружает библиотеку lib' and .a 'и ищет несколько каталогов

Это фактически отвечает также на связанные сомнения относительно 3-го варианта прямого указания объектных файлов в командной строке gcc (т.е. в этом случае весь код в объектных файлах станет частью окончательного исполняемого файла, при использовании только архивов объектные файлы, которые действительно необходимы, будут извлечены).

...