Я затронул эту проблему около двух лет назад, когда впервые применил привязки SWIG. Как только мы раскрыли большой объем кода, мы дошли до того, что SWIG будет выводить файлы C ++ настолько большого размера, что компилятор не сможет их обработать. Единственный способ обойти эту проблему - разделить интерфейсы на несколько модулей и скомпилировать их отдельно.
У этого есть несколько недостатков:
• Каждый модуль должен знать о зависимостях в других модулях. У меня есть скрипт для генерации файлов интерфейса, который обрабатывает эту сторону вещей, но это добавляет дополнительную сложность.
• Каждый дополнительный модуль увеличивает время, необходимое динамическому компоновщику для загрузки в коде. Я добавил init .py файл, который импортирует все подмодули, так что тот факт, что код разделен на части, прозрачен для пользователя, но что всегда видно, так это длительное время загрузки.
В настоящее время я проверяю наши сценарии сборки / процесс сборки и хотел посмотреть, смогу ли я найти решение этой проблемы, которое было бы лучше, чем у меня сейчас. В идеале, у меня была бы одна общая библиотека, содержащая весь код оболочки.
Кто-нибудь знает, как я могу добиться этого с помощью SWIG? Я видел некоторый пользовательский код, написанный на Ruby для конкретного проекта, где вывод постобработан, чтобы сделать это возможным, но когда я посмотрел на выполнимость для оболочек Python, это не выглядело так просто.