Связь -lname
из gcc
передается компоновщику, ld
. Это
поручает компоновщику выполнить поиск любого из файлов libname.so
(общая библиотека)
или libname.a
(статическая библиотека), сначала в указанных каталогах поиска компоновщика
(-Ldir
), в указанном порядке, а затем в каталоги поиска по умолчанию,
в их настроенном порядке. Когда любой из этих файлов найден в одном из поисков
В каталогах компоновщик прекращает поиск и вводит библиотеку в связку. Если оно
находит их в одном каталоге, а затем по умолчанию выбирает libname.so
.
На портах Windows GCC, name.lib
(статическая библиотека) и name.dll
(динамическая библиотека)
вероятно, также удовлетворит параметр -lname
.
Учитывая, что у вас установлена статическая библиотека PDCurses pdcurses.a
-LC:\PDCurses\wincon
, связь:
gcc -LC:\PDCurses\wincon -lpdcurses -o myprogram myprogram.c
не удается с:
cannot find -lpdcurses
, поскольку ни один файл не называется libpdcurses.a
, libpdcurses.so
, pdcurses.lib
или
pdcurses.dll
существует в C:\PDCurses\wincon
.
Переименование pdcurses.a
в libpdcurses.a
в этом каталоге исправит этот сбой.
Если вы не хотите его переименовывать, вы можете заменить параметр связывания -lpdcurses
с -l:pdcurses.a
. Опция -l:name
направляет компоновщик для поиска
файл называется точно name
.
Однако вы все равно не сможете связать свою тестовую программу с
либо:
gcc -LC:\PDCurses\wincon -lpdcurses -o myprogram myprogram.c
или
gcc -LC:\PDCurses\wincon -l:pdcurses.a -o myprogram myprogram.c
Сбой связи с неопределенными ссылочными ошибками для любых символов pdcurses
(функции или переменные), на которые вы ссылаетесь в myprogram.c
. (Если вы на самом деле не обращаетесь к каким-либо подобным символам в myprogram.c
, это не приведет к сбою, а только потому, что библиотека избыточна).
Чтобы исправить эту ошибку (которая может не повлиять на ваш make-файл, которого мы не видим),
вместо этого запустите:
gcc -o myprogram myprogram.c -LC:\PDCurses\wincon -lpdcurses
или аналогично, если вы выберете -l:pdcurses.a
.
Чтобы понять это, см. Ваша связь использует библиотеки перед объектными файлами, которые к ним относятся