Я портирую проект AutoTools на CMake.CMake ссылка на общую библиотеку на статические библиотеки
Что Autotools делает:
- создает некоторые статические библиотеки
- сборках некоторые общие библиотеки и ссылки статическими в общий
- создает исполняемый файл, связывает его с разделяемыми библиотеками
Что Мне удалось сделать с CMake:
- построить некоторые статические библиотеки -
add_library(staticfoo <src>)
- сборки некоторые разделяемые библиотеки -
add_library(sharedfoo SHARED <src>)
и связать их -target_link_libraries(sharedfoo staticfoo)
- построить исполняемый файл, связать его с разделяемыми библиотеками -
target_link_libraries(exe sharedfoo)
, но тащили статические библиотеки снова, тоже.
Таким образом, результирующая ссылка для исполняемого файла имеет статические библиотеки в дополнение к общим. Это не соответствует команде, созданной проектом AutoTools.
Я пробовал target_link_libraries(sharedfoo PRIVATE staticfoo)
, но это не получает символы из статического lib в интерфейс общей библиотеки.
Как получить символы без этого «переходного» поведения?
(в платформо-независимом способе)
CMake не волнует, какие библиотеки вы пытались связать со статическими/динамическими/смешанными ... это будет проблемой компоновщика на конкретной платформе. – zaufi
В окнах компоновщик удаляет символы экспорта, связывая архивные объекты/статические библиотеки, но распаковываются объекты. Это одна из основных причин, по которой библиотеки объектов были добавлены в cmake. – Youka
Действительно, это хороший способ конвертировать этот шаблон в проекты autotools. Для альтернатив и их проблем см. Этот подробный вопрос: http://stackoverflow.com/questions/5136184/linking-windows-dll-files-from-static-libraries-using-cmake-without-hand-craftin –