Почему -ldl необходим для компоновки файлов .so, но не нужен для файлов .dylib? - PullRequest
0 голосов
/ 01 октября 2018

Я связывал библиотеку glfw3 для моего проекта opengl.Я попытался скомпилировать и запустить свои коды в среде Mac и Linux.В Linux библиотека glfw3 хранилась как libglfw.so.3.2, тогда как в Mac она хранилась как libglfw.3.2.dylib.

Для того, чтобы связать эту библиотеку для g ++, в Mac мне просто нужно было использовать следующие коды

g++ -o Animation glad.o Animation.o -L/usr/local/lib -lglfw

Где, как и в Linux, мне пришлось включить -ldl, иначе это вывело бы ошибку.

g++ -o Animation glad.o Animation.o -L/usr/lib/x86_64-linux-gnu -ldl -lglfw

Почему -ldl необходима для .so файловно не для .dylib файлов?Заранее спасибо!

1 Ответ

0 голосов
/ 01 октября 2018

Разные системы разделяют функции между разными библиотеками.POSIX требует, чтобы приложения связывались с определенными библиотеками, когда они используют функции из некоторых заголовочных файлов:

Обратите внимание, что дляВ большинстве библиотек POSIX говорит, что реализация может искать эту библиотеку в отсутствие этой опции .В большинстве реализаций это разрешение используется для помещения хотя бы некоторых функций в основную библиотеку C, поэтому его можно использовать без явной ссылки на библиотеку с мандатом POSIX.В результате в некоторых системах вам нужно связываться с этими библиотеками, но не в других.

Технически, решение Linux (glibc?) Не является POSIX-совместимым, поскольку -ldl не указан как библиотекатребуется использовать функции от <dlfcn.h>.Также отсутствуют некоторые библиотеки (например, -lxnet).autoconf родился частично из-за этого различия между историческими реализациями UNIX:

...