У меня есть программа C++ A, в которой я использую две библиотеки B и C, которые в основном являются обертками больших библиотек, Y и Z (входит в состав "extern" C). Я хотел бы иметь возможность запускать обе в одной программе.
Это проект cmake.
У меня есть обе оболочки B и C в разных подкаталогах моего проекта, а библиотеки Y и Z, которые они «оборачивают», находятся в подкаталогах внутри каждого соответствующего подкаталога.
Заголовок не включен, кроме заголовков моих оберток.
Функции из B и C имеют разные имена и пространства имен, а также разные функции, используемые из Y и Z. Но, к сожалению, эти функции вызывают другие функции, определенные в Y и Z, которые имеют такое же имя и аргументы, и это приводит к ошибке времени выполнения (функция из Y вызывает функцию из Z вместо своей собственной).
Я хотел бы решить эту проблему без необходимости писать две разные программы, которые взаимодействуют друг с другом. Я уже пытался сделать B, C, Y и Z статическими библиотеками.
- Пробовал вариант переименования в связанном вопросе «Конфликт функций C». Это навлекло на меня действительно большие неприятности. Возможно, есть что-то еще, что нужно исправить в том, как создаются CMakefiles.
- #P7# <блочная цитата>
блочная цитата>add_library(foo STATIC foo1.c) install(TARGETS foo DESTINATION lib EXPORT myproj-targets) install(EXPORT myproj-targets DESTINATION lib/myproj)
И за их включение:
include(${PREFIX}/lib/myproj/myproj-targets.cmake) add_executable(myexe src1.c) target_link_libraries(myexe foo)