0 0

gcc为什末要加-lcurses, 而gcc -o test7 test7.c报错10

如题, 代码见下面

gcc -o test7 test7.c 报错如下:
$ make test7
cc    test7.c  -o test7
/tmp/cc2P6xHJ.o: In function `main':
test7.c.text+0x60): undefined reference to `initscr'
test7.c.text+0x65): undefined reference to `cbreak'
test7.c.text+0x6a): undefined reference to `noecho'
test7.c.text+0x6f): undefined reference to `stdscr'
test7.c.text+0x77): undefined reference to `wgetch'
test7.c.text+0x7f): undefined reference to `endwin'
collect2: ld returned 1 exit status
make: *** [test7] Error 1


下面则正常:
gcc -lcurses -o test7 test7.c


######################
代码如下

cat test7.c

#include <stdio.h>
#include <curses.h>

void aa(int x,float y) {
        printf("%d--%f\n",x,y);
}

main() {
        int a;
        float b;
        char ch;

        scanf("%d%f",&a,&b);
        aa(a,b);

        initscr();
        cbreak();
        noecho();
        ch = getch();
        endwin();
        printf("You input a :%c\n", ch);

}

#####################
还想问下:

1。怎样才能知道,什么时候用什末库呢?

2。libcurses.a与libcurses.so有什么区别呢?

3。下面简单例子在编译时为什么不用指定库呢?直接gcc -o test test.c
cat test.c
#include <stdio.h>
void p() {
        printf("hello world!\n");
}
main() {
        p();
}
C 
2009年9月17日 16:18

1个答案 按时间排序 按投票排序

0 0

整个编译过程不是光把源码变成汇编,把汇编变成机器码,还要跟用到的库做链接。楼主大大仔细看,错误是在ld出现的,那个是链接器,不是编译器。

libcurses.a与libcurses.so的区别在前者是静态链接库,后者是动态链接库。与前者链接,会把前者里在你的程序中用到的内容(包括代码)都复制到链接后生成的文件中。与后者链接,在链接后生成的文件中只会保留符号链接。

<stdio.h>是C的标准库的头文件,它的路径在C编译器的默认include路径上;而对应的C运行时库文件也在默认的链接路径上。所以只用到C标准库函数时不需要额外指定-I或者-l。但用标准库之外的库时就要指定了。

第一个问题不清楚楼主大大想问的是什么,留给楼下的大大接力

2009年9月18日 00:41

相关推荐

    gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-guneabi.tar.xz

    gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-guneabi.tar.xz gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-guneabi.tar.xz gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-guneabi.tar.xz gcc-linaro-4.9.4-2017.01-x86_...

    gcc.tar(gcc-4.8.5-39.el7.x86_64.rpm)

    gcc-4.8.5-39.el7.x86_64.rpm cpp-4.8.5-39.el7.x86_64.rpm gcc-c++-4.8.5-39.el7.x86_64.rpm gcc-gfortran-4.8.5-39.el7.x86_64.rpm libgcc-4.8.5-39.el7.x86_64.rpm libgfortran-4.8.5-39.el7.x86_64.rpm ...

    lcursesgcc -o hello hello.c -lcurses

    标题 "lcursesgcc -o hello hello.c -lcurses" 是一个命令行指令,用于编译一个C语言程序,该程序使用了ncurses库。在这个标题中,我们可以解析出以下几个重要的知识点: 1. **C编译器GCC**:GCC(GNU Compiler ...

    gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz

    gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译32-bit Armv7 Cortex-A, hard-float, little-endian目标中的裸机程序、u-boot、Linux ...

    gcc-4.8.5-44.el7.x86_64相关包

    gcc-4.8.5-44.el7.x86_64.rpm gcc-c++-4.8.5-44.el7.x86_64.rpm gcc-gfortran-4.8.5-44.el7.x86_64.rpm libgfortran-4.8.5-44.el7.x86_64.rpm libquadmath-4.8.5-44.el7.x86_64.rpm libquadmath-devel-4.8.5-44.el7....

    gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz

    gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz 工具,我这个免费下载,鄙视那些要币的人!下载后先解压rar,解压就就是gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz了! 我本来想...

    gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz.7z

    gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf 是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译32-bit Armv7 Cortex-A, hard-float, little-endian目标中的裸机程序、u-boot、Linux kernel...

    gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.gz

    gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译64-bit Armv8 Cortex-A, little-endian目标中的裸机程序、u-boot、Linux kernel、...

    gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz.7z

    gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译64-bit Armv8 Cortex-A, little-endian hard-float, little-endian目标中的裸机程序、u-boot、...

    gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.tar

    gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.tar是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译32-bit Armv7 Cortex-A, hard-float, little-endian目标中的裸机程序、u-boot、Linux...

    gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz

    标题中的“gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz”指的是一款由Linaro组织提供的GCC(GNU Compiler Collection)交叉编译器,版本号为6.3.1,发布于2017年5月。这个版本是针对x86_64架构的主机...

    gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar

    gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译64-bit Armv8 Cortex-A, little-endian目标中的裸机程序、u-boot、Linux kernel、...

    gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz.7z

    gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译32-bit Armv7 Cortex-A, hard-float, little-endian目标中的裸机程序、u-boot、Linux kernel...

    gcc-linaro-6.3.1-2017.05-x86-64-aarch64-linux-gnu.7z

    标题中的“gcc-linaro-6.3.1-2017.05-x86-64-aarch64-linux-gnu.7z”是一个GCC(GNU Compiler Collection)的特定版本,由Linaro组织提供。Linaro是一个开源软件工程组织,专注于优化和维护开源软件在ARM架构上的...

    gcc-linaro-7.3.1-2018.05-x86-64-aarch64-linux-gnu.tar

    gcc-linaro-7.3.1-2018.05-x86-64-aarch64-linux-gnu.tar

    gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf

    gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译32-bit Armv7 Cortex-A, hard-float, little-endian目标中的裸机程序、u-boot、Linux kernel...

    gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf

    gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译32-bit Armv7 Cortex-A, hard-float, little-endian目标中的裸机程序、u-boot、Linux kernel...

    gcc-arm-none-eabi-10.3-2021.07-win32.zip

    1. **GCC 编译器**:负责将源代码(如C或C++)转换为可执行的目标代码。对于ARM Cortex-M,它会生成适合该架构的机器码。 2. **GDB 调试器**:调试工具,允许开发者在目标硬件上或模拟器中运行程序,并进行单步执行...

Global site tag (gtag.js) - Google Analytics