Предупреждение о дублировании библиотеки, несмотря на привязку частной видимости [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Предупреждение о дублировании библиотеки, несмотря на привязку частной видимости [дубликат]

Сообщение Anonymous »

У меня есть базовая библиотека simple_events, которая создается как статическая библиотека с помощью cmake. У меня есть зависимая библиотека simple_server, которая зависит от simple_events, чтобы запускать события жизненного цикла для ключевых методов. simple_server приватно ссылается на simple_events.
У меня есть simple_client_application, который использует simple_server (и [таким образом] simple_events) ) для создания простого клиентского приложения, объединяющего функциональные возможности библиотеки.
Все это отдельные проекты, имеющие свои собственные сборки, поскольку я намерен создать модульные, пригодные для повторного использования библиотеки для моих проектов.
Ниже вы найдете соответствующие фрагменты CMakeLists.txt упомянутых проектов:
simple_events/CMakeLists.txt

Код: Выделить всё

add_library(simple_events STATIC simple_events.cpp)
# some installation instructions
simple_server/CMakeLists.txt

Код: Выделить всё

find_package(SimpleEvents REQUIRED) # works as expected
add_library(simple_server STATIC simple_server.cpp simple_connection.cpp connection_abort.cpp connection_start.cpp connection_read.cpp connection_write.cpp server_start.cpp server_abort.cpp server_accept.cpp)
[...]
target_link_libraries(simple_server
PRIVATE Simple::simple_events
)
[...]
simple_application/CMakeLists.txt

Код: Выделить всё

find_package(SimpleEvents REQUIRED)
find_package(SimpleServer REQUIRED)
add_executable(simple_app ${APP_SOURCES})
[...]
target_link_libraries(simple_app PUBLIC Simple::simple_events Simple::simple_server)
[...]
Когда я собираю simple_app, я получаю предупреждение компоновщика ld: ld: предупреждение: игнорируются повторяющиеся библиотеки: '/usr/local/lib/libsimple_events.a'.
Насколько я понимаю, поскольку simple_server приватно ссылается на simple_events, он не будет связан с simple_app транзитивно и не будет доступен для него. Таким образом, simple_app также находит и связывается с simple_events. Однако похоже, что где-то по пути ld находит повторяющиеся инструкции по созданию ссылок для simple_events, и я хочу знать, почему и как это исправить.
Я, конечно, Rubber уклонялась от GPT, но продолжала просить меня заверить, что simple_server ЧАСТНО связывается с simple_events, что просто не внушало мне уверенности в том, что он понял решение.
Я думаю, что может быть, потому что simple_server создается как статическая библиотека, включающая все символы simple_events, и потому что simple_app также ссылки на simple_events, символы дублируются в конечном двоичном файле? ... но это всего лишь предположение.
Будем благодарны за любую помощь, даже за ссылку. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ty-linking
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»