Какие библиотеки должны идти в файл pkg-config как зависимости? - PullRequest
0 голосов
/ 05 ноября 2018

Я пишу разделяемую библиотеку, которая сама зависит от библиотек boost и pcl.

При создании файла .pc для моей библиотеки я должен добавить все эти библиотеки также в файл .pc как зависимости?

Прошло много времени с тех пор, как я в последний раз изучал эти вещи, и я немного запутался, как это снова сработало в Linux. Когда мое тестовое приложение ссылается на мою библиотеку, я должен снова добавить все эти библиотеки pcl и boost в сборку, даже если библиотека уже была связана с этими библиотеками.

Но когда я смотрю, например, на глубину libQtGui.so, у него есть десятки всевозможных библиотек, на которые он ссылается, но мне не нужно указывать в своем приложении ссылки на эти библиотеки ... только -lQtGui достаточно.

Я только что использовал CMake и link_libraries, чтобы добавить boost и pcl libs.

1 Ответ

0 голосов
/ 05 ноября 2018

При создании файла .pc для моей библиотеки я должен добавить все эти библиотеки также в файл .pc как зависимости?

Это зависит от API вашей библиотеки:

  • если публичные (т.е. устанавливаемые) заголовки вашей библиотеки используют boost / pcl (т.е. имеют #inclue <boost/...>) (другими словами, вы использовали PUBLIC (или INTERFACE) именованные ключевые слова, когда связываете вашу библиотеку с boost / pcl в CMake + target_link_libraries) - тогда да вам нужно добавить их;
  • в противном случае, это зависит от того, что именно у вас есть в конце - т.е. есть ли у вашего DSO DT_NEEDED записи для библиотек boost / pcl (скорее всего) или нет (вы можете проверить это с помощью * / 1017 *). В последнем случае вам также необходимо добавить свои зависимости в файлы *.pc.

Кроме того, в случае бинарной зависимости от boost / pcl (не знаю, если у последнего есть DSO или нет), пожалуйста, убедитесь, что вы указали точное местоположение связанных библиотек - потому что у пользователя может быть многократное (сосуществующее) повышение установки (потенциально несовместимые) или могут выполнить обновление (позже) до другой (двоичной несовместимой) версии (и вы не можете сделать что-то с этим) ... Важно быть связанным с той же (или, по крайней мере, двоичной совместимостью, которая довольно сложно гарантировать повышение) библиотека, как вы сделали ...

Я только что использовал CMake и link_libraries для добавления библиотек boost и pcl.

Пожалуйста, прочтите что-нибудь о "Modern CMake" и прекратите использовать link_libraries :-) - используйте target_link_libraries вместо ...

...