У меня есть Makefile для linux, который я переношу на Дарвина. Файл make содержит кучу файлов .o и объединяет их в общий объект .so. Хорошо, поэтому я решил (я ошибаюсь об этом?), Что лучшим аналогом для этого в Дарвине является dylib. Поэтому я изменил флаг -shared на -dynamiclib.
Теперь код, который я связываю вместе с dylib, зависит от множества внешних библиотек. Когда я пытаюсь создать dylib, я получаю ошибки, говоря, что есть ссылки undefined. Но в файле Makefile Linux не указывается ни один из параметров -lwhatever или -L/path/whatever на этапе сборки, который создает файл .so. Хм? Это потому, что, когда вы создаете файл ELF.so, по умолчанию он оставляет нерешенные внешние ссылки, а затем, когда загружается общая библиотека, он рекурсивно загружает общие библиотеки, на которые зависит общая библиотека, которую вы загружаете? Не было бы так, что если общая библиотека зависит от .a или .o файла, вам нужно было бы статически связать их с разделяемой библиотекой, иначе вы не могли бы связываться во время выполнения? Как вы можете избавиться от наличия ссылок undefined в библиотеке, загруженной во время выполнения, если только ссылки не относятся к динамически загружаемым библиотекам?
Во всяком случае, если я укажу
-undefined suppress -flat_namespace
он не требует, чтобы я добавлял эти -l и -L параметры при создании общей библиотеки. Но я до сих пор не понимаю, как это может работать в конечном итоге.