【问题标题】:APUE.H Error Linux C programmingAPUE.H错误Linux C编程
【发布时间】:2016-07-22 20:17:16
【问题描述】:

我正在尝试执行以下程序- APUE.3E -> filedir -> filetype.c内(我下载APUE.3E时默认出现的。我没有做任何更改)

但是当我编译时这是我收到的错误:

myramya~/Documents/apue.3e/filedir$ gcc filetype.c -lm -o filetype /tmp/cchPKE7K.o: In function main': filetype.c:(.text+0x94): undefined reference to err_ret' collect2: error: ld returned 1 exit status

我正在使用 Linux Ubuntu。我已经在 Documents 文件夹中安装了 APUE.3E。我有管理员权限。我编写了一个简单的 Hello.c 程序并使用:

$ gcc hello.c -o hello

它没有任何问题。

【问题讨论】:

    标签: c linux unix gcc


    【解决方案1】:

    您的 hello 示例可以使用 gcc 一步编译,因为它不会调用其他文件中的任何函数(标准 C 库中的函数除外,这些函数总是被链接)。

    您的 filetype.c 调用了不在 filetype.c 中而是在其他源文件中的函数 err_ret。

    当编译更大的程序时,工作通常分两步完成:首先,通过对每个源文件使用标志 -c 调用 gcc 将源文件编译为目标文件。然后所有目标文件都链接在一起,只需一次调用 gcc 就可以将所有目标文件链接在一起。也可以将目标文件一起放入库中。通常使用 Makefile 来编译更大的项目。

    您使用 apue.3e 的具体情况在这里得到了很好的解释:https://unix.stackexchange.com/questions/105483/compiling-code-from-apue

    【讨论】:

    • 非常感谢。现在错误消失了。但是在编译后我运行了 'code' ./filetype 'code' 然后我尝试了 'code' ./a.out 'code' 这给了我一个 bash 错误:没有这样的文件或目录。如何查看输出?
    • 你有一个名为“代码”的文件吗?您链接程序的命令是什么?该命令是否包含标志-o filetype?如果是这样,我想您应该使用./filetype 运行您的程序,并可能在命令行中添加一些选项。但是我对apue一点也不熟悉。
    • 这就是我所做的:$ gcc filetype.c -o filetype -lapue 这次我没有收到任何错误。但是当我试图查看输出时: $ ./filetype 并且我没有得到任何输出。它只是进入命令提示符。
    • 然后我尝试:$ ./a.out 并收到此消息:bash: ./a.out: No such file or directory
    • ./filetype 返回命令提示符而没有任何错误消息的事实可能意味着它运行成功。但是也可以通过研究$的内容来查看程序的返回值? (echo $?)。按照惯例,返回值 0 意味着程序运行成功,而 0 以外的值意味着失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多