如何在Windows上使用gcc链接PDCurse?

如何在Windows上使用gcc链接PDCurse?,windows,linker,mingw,pdcurses,Windows,Linker,Mingw,Pdcurses,最近,我在装有Windows 7 Home Premium的HP Pavilion笔记本电脑上安装了PDCurses 3.6(最新版本)。我还安装了MinGW-w64(也是最新版本) 我开始学习如何使用curses模式,并下载了它们的示例代码();在这一点上,一切都很好。 解压程序后,我想利用Makefile来制作所有的.exe问题出在这里。 我运行cmd.exe,移动到程序所在的文件夹,然后键入mingw32 make-f Makefile。这是以下过程: mingw32-make[1]: E

最近,我在装有Windows 7 Home Premium的HP Pavilion笔记本电脑上安装了PDCurses 3.6(最新版本)。我还安装了MinGW-w64(也是最新版本)

我开始学习如何使用curses模式,并下载了它们的示例代码();在这一点上,一切都很好。 解压程序后,我想利用Makefile来制作所有的.exe问题出在这里。

我运行cmd.exe,移动到程序所在的文件夹,然后键入
mingw32 make-f Makefile
。这是以下过程:

mingw32-make[1]: Entering directory 'C:/.../ncurses_programs/JustForFun'
gcc -o hanoi.o -c hanoi.c

/* throws some warnings */

gcc -o ../demo/exe/hanoi hanoi.o -lncurses
C:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64w64-mingw32/bin/ld.exe: cannot find -lncurses
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [Makefile:20: ../demo/exe/hanoi] Error 1
rm hanoi.o
mingw32-make[1]: Leaving directory 'C:/.../ncurses_programs/JustForFun'
mingw32-make: *** [Makefile:4: all] Error 2
好吧,你肯定在想“伙计,它试图链接ncurses,而你有pdcurses,因为你在Windows上”。是的,我知道。这就是为什么我编辑了Makefile,输入了
LIBS=-lpdcurses
,而不是
LIBS=-lncurses
,但它也没有找到它

我知道pdcurses.a在哪里,所以我试着用控制台编译一个简单的程序(打印“Hello World!”),如下所示:

gcc -LC:\PDCurses\wincon -lpdcurses -o myprogram myprogram.c
我仍然得到:

C:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lpdcurses
collect2.exe: error: ld returned 1 exit status
我不知道我还能做什么


事先谢谢你

gcc
-lname
链接传递给链接器
ld
。信息技术 指示链接器搜索其中一个文件
libname.so
(共享库) 或
libname.a
(静态库),首先在指定的链接器搜索目录中 (
-Ldir
),按其指定顺序,然后按其默认搜索目录, 按照配置的顺序。在其中一个搜索中找到这些文件时 链接器停止搜索并将库输入链接的目录。如果是 在同一目录中查找它们,然后默认选择
libname.so

在GCC的Windows端口上,
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
的文件

但是,您的测试程序与链接仍然会失败 要么:

或:

链接将失败,对任何
pdcurses
符号的引用错误未定义 在
myprogram.c
中引用的(函数或变量)。(如果您在
myprogram.c
中没有实际引用任何此类符号,则不会失败,只是因为库是冗余的)

要更正此错误(这可能不会影响makefile,我们无法看到), 改为运行:

gcc -o myprogram myprogram.c -LC:\PDCurses\wincon -lpdcurses
或者,如果选择
-l:pdcurses.a
,也可以使用类似的方法


要理解这一点,请参见

您也可以只执行
gcc-o myprogram myprogram.c:\PDcurses\wincon\PDcurses.a
gcc -LC:\PDCurses\wincon -l:pdcurses.a -o myprogram myprogram.c
gcc -o myprogram myprogram.c -LC:\PDCurses\wincon -lpdcurses