например, математическая библиотека - это -lm, библиотека openmotif - это -lXm.

как они определены (чтобы избежать конфликтов) и где отмечены эти сокращения? в Makefile? (если они должны быть переданы компилятору)

Я провожу некоторые исследования зависимостей (например, с ldd и nm), и именно поэтому я хочу знать.

1 ответ1

1

Сокращения - это просто сокращение имени библиотеки, которое компоновщик должен использовать, чтобы найти код библиотеки для привязки. Например, -lXm говорит компоновщику искать либо libXm.so, либо libXm.a, в зависимости от того, выполняет ли он динамическое или статическое связывание. Не существует общего механизма, позволяющего избежать конфликтов при именовании библиотек. Автор библиотеки выбирает имя и обычно старается избегать выбора имени, которое конфликтует с любыми другими библиотеками, особенно со стандартными системными библиотеками.

Компоновщик должен знать, какие библиотеки должны быть связаны в исполняемый файл. Если шаг компиляции и компоновки запускается из 'make', то Makefile будет вызывать компилятор с флагами -l, которые определяют библиотеки, которые будут использоваться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .