具有PDCurses的单个文件程序无法使用“未定义的引用”

时间:2019-04-19 13:23:45

标签: c mingw

使用PDCurses库编译测试程序时遇到一些问题。我已经用MinGW编译器8.2.0编译了PDCurses 3.4。在输出中,我有2个文件panel.a和pdcurses.a。我将它们复制到C:\ MinGW \ lib以及C:\ MinGW \ include中的头文件curses.h。但是,当我尝试编译测试程序时,会出现错误。看来我已按照指示和操作方法正确完成了所有操作。

一些测试C代码:

#include <C:\MinGW\include\curses.h>

int main () {
    initscr();
    mvprintw( 5, 5, "Hello, World!" );
    getch();
    endwin();
    return 0;
}

错误:

c:/Users/username/Dropbox/rakshasa/main.c:4: undefined reference to `initscr'
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: c:/Users/username/Dropbox/rakshasa/main.c:5: undefined reference to `mvprintw'
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: c:/Users/username/Dropbox/rakshasa/main.c:6: undefined reference to `stdscr'
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: c:/Users/username/Dropbox/rakshasa/main.c:6: undefined reference to `wgetch'
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: c:/Users/username/Dropbox/rakshasa/main.c:7: undefined reference to `endwin'

我不知道为什么它不能正确编译。看起来编译器在链接阶段找不到库,但我不知道为什么。

我试图像 gcc -g main.c -o main.exe

谢谢。

1 个答案:

答案 0 :(得分:0)

切勿在 [[11, 11], [15, 12], [13, 18], [14, 21]] 指令中使用绝对路径。如果需要,您应该放置 #include 而不是 #include <C:\MinGW\include\curses.h> 并使用 #include <curses.h> 标志进行编译。

接下来您需要使用 -IC:\MinGW\include 链接到相关库。如果需要,您可以使用 -lpdcurses 添加库的位置。

因此,如果我们拆分编译和链接步骤,您需要以下命令:

-LC:\MinGW\lib

虽然我认为您可以省略 gcc -g main.c -c -o main.o -IC:\MinGW\include gcc main.o -o main.exe -lpdcurses -LC:\MinGW\lib -I 标志,因为它们指向编译器的 -Linclude 文件夹的位置。

最后:MinGW 有点过时了,GCC 8.2.0 也是如此。我建议您切换到 MinGW-w64(同时支持 32 位和 64 位 Windows)。要获得更新的 MinGW-w64 GCC 版本,您可以尝试来自 https://winlibs.com/ 的独立版本。