我如何在 Windows 上使用 gcc link PDCurses?
How can I link PDCurses using gcc on Windows?
最近我在装有 Windows 7 Home Premium 的 HP Pavilion 笔记本电脑上安装了 PDCurses 3.6(最新版本)。我还安装了 MinGW-w64(也是最新版本)。
嗯,开始学习使用curses模式here, and downloaded their example codes (ncurses_programs.tar.gz);此时一切正常。
解压缩程序后,我想利用 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
嗯,你肯定在想"man, it's trying to link ncurses and you have pdcurses because you are on 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
我不知道我还能做什么...
先谢谢你!
-lname
link gcc
的年龄被传递给 link 儿 ld
。它
指示 linker 搜索任一文件 libname.so
(共享库)
或 libname.a
(静态库),首先在指定的 linker 搜索目录中
(-Ldir
),按照指定的顺序,然后是它的默认搜索目录,
按照他们配置的顺序。当在其中一个搜索中找到这些文件中的任何一个时
linker 停止搜索目录并将图书馆输入 linkage。如果它
在同一目录中找到它们,然后默认选择 libname.so
.
在 GCC 的 Windows 端口上,name.lib
(静态库)和 name.dll
(动态库)
也可能会满足 -lname
选项。
鉴于您已经安装了 PDCurses 静态库 pdcurses.a
-LC:\PDCurses\wincon
,link年龄:
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
将解决此故障。
如果你不想重命名,那么你可以替换 linkage 选项 -lpdcurses
-l:pdcurses.a
。选项 -l:name
指示 link 用户搜索
精确命名为 name
.
的文件
但是,您的测试程序仍然会失败 link
或者:
gcc -LC:\PDCurses\wincon -lpdcurses -o myprogram myprogram.c
或:
gcc -LC:\PDCurses\wincon -l:pdcurses.a -o myprogram myprogram.c
linkage 将因任何 pdcurses
符号的未定义引用错误而失败
您在 myprogram.c
中引用的(函数或变量)。 (如果您实际上没有在 myprogram.c
中引用任何此类符号,那么它不会失败,而只是因为库是多余的)。
要更正此错误(这可能不会影响您的 makefile,我们看不到),
相反 运行:
gcc -o myprogram myprogram.c -LC:\PDCurses\wincon -lpdcurses
或类似的选择 -l:pdcurses.a
。
要了解这一点,请参阅 Your linkage consumes libraries before the object files that refer to them
最近我在装有 Windows 7 Home Premium 的 HP Pavilion 笔记本电脑上安装了 PDCurses 3.6(最新版本)。我还安装了 MinGW-w64(也是最新版本)。
嗯,开始学习使用curses模式here, and downloaded their example codes (ncurses_programs.tar.gz);此时一切正常。 解压缩程序后,我想利用 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
嗯,你肯定在想"man, it's trying to link ncurses and you have pdcurses because you are on 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
我不知道我还能做什么...
先谢谢你!
-lname
link gcc
的年龄被传递给 link 儿 ld
。它
指示 linker 搜索任一文件 libname.so
(共享库)
或 libname.a
(静态库),首先在指定的 linker 搜索目录中
(-Ldir
),按照指定的顺序,然后是它的默认搜索目录,
按照他们配置的顺序。当在其中一个搜索中找到这些文件中的任何一个时
linker 停止搜索目录并将图书馆输入 linkage。如果它
在同一目录中找到它们,然后默认选择 libname.so
.
在 GCC 的 Windows 端口上,name.lib
(静态库)和 name.dll
(动态库)
也可能会满足 -lname
选项。
鉴于您已经安装了 PDCurses 静态库 pdcurses.a
-LC:\PDCurses\wincon
,link年龄:
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
将解决此故障。
如果你不想重命名,那么你可以替换 linkage 选项 -lpdcurses
-l:pdcurses.a
。选项 -l:name
指示 link 用户搜索
精确命名为 name
.
但是,您的测试程序仍然会失败 link 或者:
gcc -LC:\PDCurses\wincon -lpdcurses -o myprogram myprogram.c
或:
gcc -LC:\PDCurses\wincon -l:pdcurses.a -o myprogram myprogram.c
linkage 将因任何 pdcurses
符号的未定义引用错误而失败
您在 myprogram.c
中引用的(函数或变量)。 (如果您实际上没有在 myprogram.c
中引用任何此类符号,那么它不会失败,而只是因为库是多余的)。
要更正此错误(这可能不会影响您的 makefile,我们看不到), 相反 运行:
gcc -o myprogram myprogram.c -LC:\PDCurses\wincon -lpdcurses
或类似的选择 -l:pdcurses.a
。
要了解这一点,请参阅 Your linkage consumes libraries before the object files that refer to them