Что делает g ++ / g cc при запросе ссылки на файлы .a? - PullRequest
0 голосов
/ 20 марта 2020

Я читаю учебник о C разработке с использованием библиотеки SDL на MingW и Windows. (Учебник на самом деле о C ++, но я предполагаю, что установка и сборка одинаковы).

Учебник дает следующую команду для сборки программы:

g++ 01_hello_SDL.cpp -IC:\mingw_dev_lib\include\SDL2 -LC:\mingw_dev_lib\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o 01_hello_SDL
  1. В этой команде мы используем -L и -l, чтобы указать g++, где искать .a файлы (, а не .DLL или .so файлы) для связи. Однако, насколько я понимаю, эта команда должна динамически связывать библиотеку. И, как мы знаем, .a файлы - это stati c библиотечные файлы. Чего мне не хватает?

  2. Почему мы не связываемся с файлом библиотеки .DLL, а вместо этого мы связываемся с этими .a файлами? При выполнении файл .DLL должен присутствовать рядом с исполняемым файлом, но, насколько я понимаю, .a не потребуется. Опять же, чего мне не хватает?

1 Ответ

0 голосов
/ 20 марта 2020

-l не только для динамических c библиотек. Он также может быть использован для связывания stati c библиотек.

На Linux, обычно прямая ссылка на файл .so (эквивалент .dll). На Windows это все еще возможно сделать (я думаю), но более нормально связать с файлом .lib, который называется import library , который упаковывает .dll (вы ссылаетесь на .lib и .lib ссылаются на .dll). Поскольку вы не используете цепочку инструментов Microsoft, возможно, ваша цепочка инструментов по-прежнему использует библиотеки импорта, но называет их файлами .a вместо файлов .lib.

...