Я работаю над проектом Android, который создает насыщенные libmain.so с использованием cmake .
В моем cmakelists.txt я связываю Main со многими другими статическими библиотеками, такими как Boost .
Код: Выделить всё
// main CMakeLists.txt
add_library(main SHARED )
target_link_libraries(main boost png xml2)
add_subdirectory(
/build)
add_subdirectory( /build)
add_subdirectory( /build)
Теперь у меня есть требование добавить еще одну библиотеку зависимостей libxyz чьи файлы cmake предоставляются мне. Их cmake строит libxyz как общую библиотеку. Он также ссылается с Boost библиотекой и общей библиотекой openssl.so
Код: Выделить всё
// libXYZ's CMakeLists.txt
add_library(libXYZ SHARED )
target_link_libraries(libXYZ boost libA)
target_link_libraries(libXYZ $)
Теперь я хочу связать libxyz.so с моим libmain.so
Итак, в cmakelists моего основного проекта.
Код: Выделить всё
target_link_libraries(main libXYZ boost png xml2)
Я ожидал дублированных ошибок символа, потому что как Main , так и Libxyz ссылка на Boost , но я не получил никаких дублирующих ошибок символа. Когда я изменил Cmake Libxyz , чтобы создать его как статическую библиотеку, я сделал:
Код: Выделить всё
// libXYZ's CMakeLists.txt
add_library(libXYZ STATIC )
После изменения его на Static я получил дублирующую ошибку символа из файлов Boost . Почему дублирующие ошибки символа не были выброшены, когда Libxyz был построен в качестве общей библиотеки? Итак, я удалил импульс из своего основного Cmake и использовал их импульс, и он был хорошо связан. Но когда я загружаю приложение, я получаю, я не могу найти ошибку OpenSsl.SO во время выполнения.
Я хотел спросить, как мне связать библиотеки, чтобы мне приходилось внести минимальные изменения в Cmake Libxyz (потому что он предоставляется третьим лицом), чтобы размер моего приложения не увеличивалось из -за дублирования символов и не загружается без ошибок.>
Подробнее здесь:
https://stackoverflow.com/questions/794 ... -libraries