Я создаю динамическую c библиотеку, которая зависит от другой библиотеки c, которую я создал ранее. Библиотека stati c зависит от WebRT C. Однако новая библиотека Dynami c будет использоваться в приложении Swift, что также зависит от WebRT C. Это вызвало множество коллизий символов во время сборки, поэтому я последовал за этим до c и добавил файл экспорта символов в Dynami c lib.
Теперь Dynami c lib и приложение Swift оба работали нормально, однако я получил много консольных предупреждений относительно дублирующихся символов класса Obj C при запуске приложения Swift:
objc[63026]: Class RTCCVPixelBuffer is implemented in both /path/to/the/dynamic/framework/binary and /path/to/existing/webrtc/in/the/swift/app. One of the two will be used. Which one is undefined.
Я проверил свою динамику c framework и эти символы WebRT C Obj C являются локальными (не внешними) символами. Теперь у меня есть два вопроса:
- Будет ли локальное столкновение символов вызывать какие-либо проблемы во время выполнения, такие как неопределенное поведение приложения и приложение cra sh? Я понимаю, что дублированные глобальные символы не будут работать, но каков наихудший результат наличия дублированных локальных символов?
- Нужны ли эти локальные символы и как их удалить? Сначала я попытался предварительно связать объектные файлы в библиотеке stati c, установив
GENERATE_MASTER_OBJECT_FILE
, STRIP_STYLE
и DEPLOYMENT_POSTPROCESSING
в настройках сборки, в надежде разрешить все символы до того, как они попадут в библиотеку dynamici c, но все же я вижу эти локальные объекты Obj C символы класса в моей бинарной библиотеке c. Я также попытался установить опцию -R
в Additional strip flags
для удаления локальных символов, но это также не удалось. Требуются ли эти символы и не могут быть удалены, потому что от них зависит отправка сообщения Obj C? Как правильно решить проблему столкновения символов?