Как встроить статическую библиотеку в общую библиотеку - в OSX - PullRequest
1 голос
/ 23 мая 2019

Я задавал этот вопрос по linux , но теперь мне нужна та же информация о macos ... Вопрос (адаптированный к macos):

Я пытаюсь создать общую библиотеку libbar.dylib, которая встраивает коммерческую статическую библиотеку (лицензирование в порядке). Коммерческая библиотека имеет 4 версии: libfoo-seq.a, libfoo-mt.a, libfoo-seq.dylib и libfoo-mt.dylib (все они предоставляют одинаковые символы, только код является последовательным / многопоточным, и библиотека является статической / общей). Из этих четырех я хочу, чтобы мой код всегда использовал последовательную библиотеку foo, поэтому при создании libbar.dylib я связываю вместе свои объектные файлы и libfoo-seq.a.

Проблема в том, что пользователи моей библиотеки, возможно, уже загрузили libfoo-mt.dylib к тому времени, когда они загружают мой libbar.dylib, таким образом, все символы из libfoo уже присутствуют к моменту чтения libbar.dylib в , поэтому мои вызовы функций в foo преобразуются в многопоточную версию. По крайней мере, я думаю, что это происходит. Есть ли способ перепроверить?

Если это действительно то, что происходит, мне интересно, как я могу решить эту проблему? Какие магические флаги мне нужно использовать при компиляции для создания моих объектных файлов и когда я связываю свои объектные файлы с libfoo-seq.a для создания libbar.dylib?

...