2010-10-05 3 views
5

Возможно, что во время компиляции существует более одного экземпляра библиотеки на пути поиска. В каком порядке каталоги процесса компоновщика включаются в путь поиска? Эта платформа относится к Sun OS.В каком порядке компоновщик обрабатывает библиотечные каталоги?

ответ

6

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

LD_LIBRARY_PATH сложно, хотя:

LD_LIBRARY_PATH 

Список каталогов, в которых производится поиск библиотек, указанных с опцией -l. Несколько каталогов разделены двоеточием. В большинстве общем случае, она будет содержать два список каталогов, разделенных точкой с запятой :

dirlist1; dirlist2 

Если л.д. вызывается с любым количеством вхождений -L, как в:

ld . . . -Lpath1 . . . -Lpathn . . . 

то упорядочение путь поиска:

  dirlist1 path1 . . . pathn dirlist2 LIBPATH 

Когда список каталогов не содержит точку с запятой, это интерпретируется как dirlist2.

LD_LIBRARY_PATH также используется для указания каталогов поиска библиотек на компоновщика времени выполнения. То есть, если LD_LIBRARY_PATH существует в среды, среда выполнения компоновщик поиск в каталогах, названные в нем, перед его каталогом по умолчанию, для общих объектов, которые будут связаны с программой при исполнении.

Подробнее об этом here.

+0

Просто, чтобы подтвердить, правильно ли это LD_LIBRARY_PATH после всех опций -L? – Leonid

+0

Нет, не совсем. Это зависит от того, содержит ли он точку с запятой или нет. Если это не так, то это происходит после всех -L, иначе список перед точкой с запятой идет первым, затем все -L-параметры, а затем список после точки с запятой. Я обновлю свой ответ, потому что трудно найти это в этом большом документе. Также обратите внимание, что это относится к Sun linker, а не к GNU. Я не уверен, какой из них вы используете. –

Смежные вопросы