【问题标题】:Link a .c file with a main.c file将 .c 文件与 main.c 文件链接
【发布时间】:2015-01-13 23:34:13
【问题描述】:

我为一个类写了一个函数,我需要提交它以便在编译时工作。

main.c 头文件看起来像...

#include <stdio.h>
#include <stdlib.h>

我的函数代码 fun.c 是这样的……

#include <stdio.h>
#include <stdlib.h>
#include "main.c"

但由于某种原因,它们没有链接在一起。当我编译和运行时,我没有收到错误,它只是运行 main.c,就好像 fun.c 不存在一样,这意味着它忽略了对 fun.c 的函数调用并运行程序而不执行我需要显示的内容.

我在 main.c 中一起编写了代码,所以我知道该函数有效。我只是在将其拆分为两个单独的 .c 文件并链接它们时遇到了一点麻烦。

感谢您的帮助

//编辑和更新

用gcc -m32 -O1 *.c编译目录下的两个文件分别是fun.c和main.c

基本上,我们提交的函数必须与提供的 main.c 一起使用,但我们并没有大声修改 main.c,所以我不知道如何将它添加到我的函数中,所以它们都编译/链接在一起

【问题讨论】:

  • 您(通常)不要在其他 .c 文件中包含 .c 文件。另外,请将您的 makefile 或编译器/链接器命令行参数发布到您的问题中。
  • 尝试gcc -Wall -m32 -O1 main.c fun.c -o exename,其中exename 是您选择调用可执行文件的任何名称。
  • 哦,正如戴所说,从 fun.c 中删除 #include "main.c"
  • "当我编译和运行时我没有收到错误,它只是运行 main.c,好像 fun.c 不存在" - 如果程序正在运行,则没有链接错误.您的程序引用的 func.c 文件中的符号(全局函数和变量)已成功解析为内存地址,这意味着您确实将它们作为可执行映像的一部分。
  • main.c 中调用function 中的fun.c 的函数是什么样的?我们可以整夜猜测,但除非您发布您的代码,否则我们无处可去,只能进一步进入猜测领域。

标签: c linker


【解决方案1】:

以后请为您的外包文件使用其他名称,main.c 不方便。正确的做法是:为您的外包 main.c 创建一个头文件。它应该命名为 main.h。在那里你将声明你的函数,例如: addNumbers(int a, int b); 然后你打开你的外包 main.c 文件,然后你 #include "main.h"。然后打开你的 fun.c 文件和 #include "main.h"。一切就绪后,编译你的主文件:gcc -c -o fun.o fun.c » 然后你的外包文件:gcc -c -o main.o main.c » 现在将两个文件链接在一起: gcc -o name main.o fun.o 然后你就可以执行你的程序了。

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2011-11-06
    • 2016-12-08
    • 2020-04-29
    相关资源
    最近更新 更多