порядок поиска библиотеки линкера gcc; пути плюс статический против общего

Читая руководство по gcc, я считаю, что следующие два утверждения верны:

  1. Пути поиска в библиотеке, указанные в командной строке, ищутся перед путями «по умолчанию» (которые, как я предполагаю, означают вещи в переменной среды LIBRARY_PATH)

  2. Совместно используемые библиотеки будут в предпочтении связаны со статическими библиотеками (при отсутствии флагов, говорящих о том, что нужно делать иначе)

Но какой из этих двух доминирует? Например, если я наберу

gcc myprog.cpp -o myprog -Lmypath -lmylibrary

и в mypath есть статическая библиотека «libmylibrary.a», и в каком-то месте, указанном в LIBRARY_PATH, есть общая библиотека «libmylibrary.so», какая из этих библиотек будет использоваться? Я предполагаю, что статическая библиотека будет использоваться (то есть (1) доминирует), но я вижу некоторые забавные ошибки компиляции, которые заставляют меня сомневаться в этом предположении, поэтому я хотел убедиться …

5

Решение

В вашем примере статическая библиотека libmylibrary.a будет связан в
предпочтение любому libmylibrary.a или же libmylibrary.so которые могут
существует в одной из директорий поиска компоновщика по умолчанию. Компоновщик
поиск в mypath до любого из мест по умолчанию, и как только
он находит libmylibrary.a или же libmylibrary.soвыглядит не дальше
удовлетворить -lmylibrary,

Если mypath содержащиеся и то и другое libmylibrary.a а также libmylibrary.so,
последний будет предпочтительным.

Я не уверен, на какой источник вы ссылаетесь в «руководстве по gcc», но
«компоновщик gcc» является компоновщиком GNU, ldи вы найдете
Значения параметров командной строки очень хорошо объяснены в его руководство

3

Другие решения


По вопросам рекламы [email protected]