Что происходит с неопределенными символами в разделяемой библиотеке или dylib?

У меня есть Makefile для Linux, который я переношу на Дарвина. Makefile берет кучу файлов .o и связывает их вместе в общий объект .so. Итак, я подумал (я ошибаюсь в этом?), Что лучший аналог этого в Дарвине - это дилиб. Поэтому я изменил флаг -shared на -dynamiclib.

Теперь код, который я связываю вместе в dylib, зависит от множества внешних библиотек. Когда я пытаюсь создать dylib, я получаю сообщение об ошибке, указывающее на наличие неопределенных ссылок. Но в файле Makefile Linux не указаны параметры -lwhatever или -L / path / Any на этапе сборки, на котором создается файл .so. Хм? Это потому, что когда вы создаете файл ELF .so, по умолчанию он оставляет внешние ссылки неразрешенными, а затем, когда загружается разделяемая библиотека, он рекурсивно загружает разделяемые библиотеки, которые зависят от разделяемой библиотеки, которой вы являетесь. загрузка? Не будет Может быть, если общая библиотека зависит от файла .a или .o, вы должны были бы статически связать их с общей библиотекой, иначе вы не смогли бы связать во время выполнения? Как можно обойтись без неопределенных ссылок в библиотеке, загружаемой во время выполнения, если только ссылки не относятся к динамически загружаемым библиотекам?

В любом случае, если я укажу

-undefined suppress -flat_namespace

, мне не потребуется добавлять эти -l и параметры -L при создании общей библиотеки. Но я до сих пор не понимаю, как это может работать в конечном итоге.

19
задан eeeeaaii 12 September 2010 в 14:47
поделиться