Как заставить библиотеку stati c включить ее зависимости? - PullRequest
0 голосов
/ 09 января 2020

Я создаю свою собственную библиотеку stati c с g cc и делаю так:

g++ \
    ... list of library sources ... \
    ... a lot of -L -l -I -D options etc... \
    -c \
    && ar crf ./lib/libpackager.a *.o

Затем я использую эту библиотеку в своем приложении. В настоящее время я построил это так.

g++ \
    myApp.cpp \
    ... same -L -l -I options as in library ... \
    -L. -lpackager \
    -o myApp

Это работает, но я немного странен для меня, что мне нужно дублировать все -l и -L во время сборки приложения. Можно ли включить все эти библиотечные зависимости внутри библиотеки. Моя цель создать приложение, подобное этому.

g++ myApp.cpp -L. -lpackager -o myApp

1 Ответ

1 голос
/ 11 января 2020

Передача комментариев в ответ.

Указание операций -l и -L при компиляции в объектные файлы не имеет значения. Некоторые версии G CC предупреждают об аргументах, которые не будут использоваться, поскольку они являются аргументами времени соединения, и связывание не будет использоваться, если вы включите флаг -c.

ar Команда не знает, что делать с аргументами C компилятора -l и -L (она может иметь свое собственное использование для флагов; одна версия ar принимает, но игнорирует -l).

Итак, вы должны указать зависимости при связывании с библиотекой stati c. Так было с начала 70-х годов - этот аспект еще не изменился. Совместно используемые библиотеки могут быть построены с информацией о зависимостях, но не могут быть библиотеками stati c.

Насколько я понимаю, мне нужно собрать общую библиотеку и связать ее в состоянии c, верно?

Нет. Вам либо нужно собрать и связать разделяемую библиотеку как разделяемую библиотеку, либо принять, что использование библиотеки stati c означает, что при использовании этой библиотеки вам потребуется указывать другие библиотеки в командной строке. Существуют системы, которые помогают управлять такой информацией; pkg-config является одним из таких. AFAIK, вы не можете связать совместно используемую библиотеку «stati c way».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...