У меня есть два проекта, написанные на C ++. Предположим, что проекты названы первым и вторым, первый из которых является базовым, у второго проекта есть надстройки для первого, поэтому, когда я собираю и устанавливаю второй проект, он просто добавляет функциональность первого.
Я создал два отдельных проекта Makefile ‘first’ и ‘second’, и я могу построить оба из них по отдельности.
Моя проблема в том, что я не могу связать двоичные файлы, сгенерированные в ‘first’, как базовые двоичные файлы для ‘second’. Я попытался найти похожие вопросы по stackoverflow, но у меня не было представления о том, как связать двоичные файлы, сгенерированные с первого по второй, любая помощь будет принята с благодарностью.
Дайте мне знать, если мне нужно пересмотреть мой вопрос.
Если вы используете GCC, и прочитайте ссылка на параметры компоновщика вы заметите варианты для связи с внешними библиотеками:
-L<directory>
Эта опция говорит компоновщику добавить <directory>
к пути поиска библиотеки. Другими словами, он сообщает компоновщику, где искать файлы библиотеки.
-l<name-of-lib>
Эта опция говорит компоновщику связываться с библиотекой. Библиотеки в средах POSIX (Linux, OSX, Windows, использующие Cygwin или MinGW) названы как libname-of-lib.a
, но с -l
вариант, вам не нужно использовать lib
префикс или .a
расширение. Также обратите внимание, что в опции -l
, то есть маленькая буква L (не заглавная i или цифра 1).
Подводя итог: Чтобы связать с библиотекой из другого каталога, вы ссылаетесь следующим образом:
$ gcc <other flags> <object files> -o <executable> -L<directory> -l<library>
В вашем случае вы должны для -L
Опция указать каталог, где библиотека для project1
есть и для -l
вариант вы передаете базовое имя библиотеки.
Если с другой стороны, вы не включаете project1
в библиотеку, и хотите связать ее с объектными файлами напрямую, это тоже хорошо:
$ gcc <flags> <object files of project1> <object files of project2> -o <executable>
Конечно, объектные файлы могут быть полными или относительными путями. Например, если у вас есть следующая структура каталогов:
/ `- дом `- пользователь `- мой проект | - проект1 `- project2
Тогда, если вы находитесь в project2
каталог, к которому вы можете получить доступ к объектным файлам project1
лайк
../project1/objectfile.o
Все это, конечно, может быть помещено в Makefile.
Других решений пока нет …