【问题标题】:Compiling C code from terminal, returns fatal error? [closed]从终端编译 C 代码,返回致命错误? [关闭]
【发布时间】:2013-12-08 16:54:42
【问题描述】:

我正在学习 linux 下的静态库和共享库,但遇到了一个我找不到解决方案的问题。 所以,这是我的 /folder ls:

user@Project:~/7.1$ ls

历史 main.c oduzmi.c
podijeli.o potenciraj.c zbroji.o libmathsimple.a main.o
oduzmi.o pomnozi.c potenciraj.o libpotenciraj.so mathsimple.h podijeli.c pomnozi.o zbroji.c

现在我尝试编译我的 main.c,如下所示:

#include <stdio.h>
#include <mathsimple.h>
int main(void)
{

  int a,b;
  printf("Unesi a:\n");
  scanf("%d",&a);
  printf("Unesi b:\n");
  scanf ("%d",&b);
  zbroji(a,b);
  oduzmi(a,b);

return 0;
}

当我执行 ./main.c 时,我得到:

./main.c: line 4: syntax error near unexpected token `('
./main.c: line 4: `int main(void)'

编辑: 我删除了mathsimple.h,得到了相同的输出。之前libmathsimple.a的错误已修复,谢谢指教。

附:所有权限均已设置。是否有可能我忘记在某处包含某些内容??

【问题讨论】:

  • #include &lt;libmathsimple.a&gt; 您是否要像包含头文件一样包含库?看起来大错特错。
  • 呃……呃……呃……退一步。您需要了解代码和可执行文件之间的区别是什么。这很严重。
  • 与终端无关;使用其他编译程序的方法也会出现同样的错误。
  • @ouah 是的,我现在知道这是错误的,我非常沮丧,将它包含在 main.c 中。

标签: c linux compilation


【解决方案1】:

你需要编译它!

尝试man gcc 获取详细信息

【讨论】:

    【解决方案2】:

    归因于第 4 行的错误是文件中早期问题的结果。

    首先,有two forms of #include statements,一个使用&lt;&gt; 将名称括起来,另一个使用双引号。当要包含的文件位于工作目录而不是库目录时,请使用双引号。

    其次,像libmathsimple.a 这样的二进制文件是预先编译的,在 C 编译器中看起来像是垃圾文件。相反,当您链接 .o 文件时,请使用 -l 选项来提及 libmathsimple.a,可能类似于 -lmathsimple

    【讨论】:

    • 大多数(全部?)shell 的“#”字符是注释。所以它撞到第 4 行并放弃了
    • @EdHeal 那么我应该如何包含 stdio.h?
    • @Nebbs - 你需要编译代码!
    • @Nebbs - 请接受答案
    • @EdHeal - 很抱歉,到目前为止我还没有收到答复。我一收到就接受。最接近的建议是 jwpat7,我对此表示赞同。
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2016-11-29
    相关资源
    最近更新 更多