Линкер, информация о библиотеках и каталогах - PullRequest
1 голос
/ 15 мая 2010

Я закончил оба своих класса C ++ 1/2, и мы ничего не рассказали о связывании с библиотеками или добавлении дополнительных библиотек в код C ++.

У меня был день сена, пытающийся выяснить это; Мне не удалось найти основную информацию link об объектах. Первоначально я думал, что проблема заключалась в IDE (Netbeans; и Code :: Blocks). Однако я не смог настроить wxWidgets и GTKMM.

Может ли кто-нибудь указать мне правильное направление в терминологии и базовой информации о #includ файлах и link файлах в приложении Cpp? По сути, я хочу / нужно знать все, что касается этого процесса. Разница между .dll, .lib, .o, .lib.a, .dll.a. Разница между .h и «библиотекой» (.dll, .lib правильная?)

Я понимаю, что мне нужно прочитать документацию по компилятору, которую я использую; однако все компиляторы (о которых я знаю) используют компоновщик и заголовки; Мне нужно изучить эту информацию.

Пожалуйста, укажите мне правильное направление! :]

Пока в моих квестах я узнал:

  • Linker связывает библиотеки, уже скомпилированные для вашего проекта.
  • .a файлы являются статическими библиотеками (.lib в windows)
  • .dll в windows это общая библиотека (.so в * nix)

1 Ответ

0 голосов
/ 15 мая 2010

В Unix-подобных системах библиотеки обычно находятся в /usr/lib.Расширение .a указывает, что вы имеете дело с архивным файлом, созданным, например, с ar .Они создаются из объектных файлов с расширением .o.Затем компоновщик может разрешить ссылки во время компиляции.Они называются статическими библиотеками, потому что машинный код из объектного файла копируется в конечный исполняемый файл.

Если вы, например, рассмотрите математическую библиотеку, вы найдете саму библиотеку по адресу /usr/bin/libm.a и соответствующий заголовочный файл в вашем каталоге include (например, /usr/include/math.h).Вы должны включить заголовок math.h для компилятора и для компоновщика, укажите библиотеку libm.a для разрешения ссылок, которые оставлены компилятором.

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

.dll - это динамически связанные библиотеки для Microsoft Windows, и я не очень знаком с ними, но я предполагаю, что соответствующие шаги похожи.

...