“make” 命令不起作用

“make” 命令不起作用

我目前正在尝试安装 graphics.h 来进行 C 编程,但是我遇到了一个迄今为止无法解决的问题。

每个解释该过程的教程都是完全相同的,它们都有一个步骤,即输入提取的 libgraph 文件,打开终端并执行以下操作:

./configure 
sudo make 
sudo make install 
sudo cp /usr/local/lib/libgraph.* /usr/lib

我相信之前的所有步骤都是正确完成的(但如果有帮助的话我可以尝试更详细地描述它们),但是在使用“make”命令时出现错误:

Makefile:409: warning: ignoring old recipe for target 'libgraph.pc'
make  all-recursive
make[1]: Entering directory '/home/nazrin/Downloads/libgraph-1.0.2'
Makefile:934: warning: overriding recipe for target 'libgraph.pc'
Makefile:409: warning: ignoring old recipe for target 'libgraph.pc'
Making all in doc
make[2]: Entering directory '/home/nazrin/Downloads/libgraph-1.0.2/doc'
Making all in man
make[3]: Entering directory '/home/nazrin/Downloads/libgraph-1.0.2/doc/man'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/nazrin/Downloads/libgraph-1.0.2/doc/man'
make[3]: Entering directory '/home/nazrin/Downloads/libgraph-1.0.2/doc'
make[3]: Nothing to be done for 'all-am'.
make[3]: Leaving directory '/home/nazrin/Downloads/libgraph-1.0.2/doc'
make[2]: Leaving directory '/home/nazrin/Downloads/libgraph-1.0.2/doc'
make[2]: Entering directory '/home/nazrin/Downloads/libgraph-1.0.2'
Makefile:934: warning: overriding recipe for target 'libgraph.pc'
Makefile:409: warning: ignoring old recipe for target 'libgraph.pc'
/bin/bash ./libtool --mode=link gcc -g -O2 -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -DFONTDIR=\""/usr/local/share/libgraph/Font/"\" -g -O2 -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT   -o libgraph.la -rpath /usr/local/lib -version-info 1:2:0 -export-dynamic libgraph.lo text.lo shapes.lo polygon.lo  -lm -lSDL_image -L/usr/lib/x86_64-linux-gnu -lSDL 
gcc -shared  .libs/libgraph.o .libs/text.o .libs/shapes.o .libs/polygon.o  -lm -lSDL_image -L/usr/lib/x86_64-linux-gnu -lSDL  -Wl,-soname -Wl,libgraph.so.1 -o .libs/libgraph.so.1.0.2
/usr/bin/ld: .libs/text.o:(.bss+0x0): multiple definition of `InternalFont'; .libs/libgraph.o:(.bss+0x40): first defined here
/usr/bin/ld: .libs/text.o:(.bss+0x810): multiple definition of `TP'; .libs/libgraph.o:(.bss+0x850): first defined here
/usr/bin/ld: .libs/shapes.o:(.bss+0x0): multiple definition of `_last_arc'; .libs/libgraph.o:(.bss+0x860): first defined here
/usr/bin/ld: .libs/shapes.o:(.bss+0x18): multiple definition of `_internal_linestyle'; .libs/libgraph.o:(.bss+0x878): first defined here
/usr/bin/ld: .libs/polygon.o:(.bss+0x0): multiple definition of `_scanlist'; .libs/libgraph.o:(.bss+0x888): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:377: libgraph.la] Error 1
make[2]: Leaving directory '/home/nazrin/Downloads/libgraph-1.0.2'
make[1]: *** [Makefile:552: all-recursive] Error 1
make[1]: Leaving directory '/home/nazrin/Downloads/libgraph-1.0.2'
make: *** [Makefile:268: all] Error 2

我试过删除“sudo”,假设问题不重要,然后继续,然后重新做一遍教程(我知道这似乎不是什么大事,但对于 Linux 新手来说,这是一场噩梦)。虽然我找到了类似问题的解决方案,但它们不起作用,要么是因为我的问题完全不同,要么是因为我太笨,做错了什么。

答案1

您唯一做错的事就是尝试使用现代编译器/链接器编译/链接 20 年前的代码。这实际上不是适合初学者的项目,但有三种方法可以“修复”该问题。

  1. 找出一种更现代的方法/代码来完成您要做的事情。
  2. 查看错误并修复它们。链接器告诉您某些东西被定义了两次,例如 _last_arc。其中一个可能应该用“extern”关键字声明,以避免空间的双重分配,从而导致链接器出错。
  3. 很可能有一个链接器选项可以覆盖这样的双重声明,因此请更改 makefile 以添加此选项。

无论如何,调试 20 年前的代码是学习编程的一种方法,但不是我建议的方法。提示,如果您想尝试 extern 方法,请编译器生成 .o 文件,使用 nm 列出符号,并查看重复声明的项目位于何处。

相关内容