gcc:没有链接文件

时间:2012-08-16 18:32:38

标签: c gcc linker

我有main.c,snmpy.c,snmpy.o和一个makefile。我通过命令行在Linux服务器上运行它。以下是所有这些......

main.c中:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "snmpy.h"

int main(void) {

   char* message = sayHello();

   printf("%s", message);

   return 0;
}

snmpy.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "snmpy.h"

char* sayHello(){

   char* hiya = "Hello!!\n";

   return hiya;

}

snmpy.h:

char* sayHello();

生成文件:

# Compiler
CC = /usr/bin/gcc

# Name of program
PROG = snmpy

# The name of the object files
OBJS = snmpy.o main.o

# All the header and c files
SRCS = main.c snmpy.c
HDRS = snmpy.h

# Add -I to the dir the curl include files are in
CFLAGS = -c -g -std=c99 -Wall

# Build the executable file
$(PROG): $(OBJS)
        $(CC) $(CFLAGS) $(OBJS) -o $(PROG)

# Seperately compile each .c file
main.o: main.c snmpy.h
        $(CC) $(CFLAGS) -c main.c

snmpy.o: snmpy.c snmpy.h
        $(CC) $(CFLAGS) -c snmpy.c

# Clean up crew
clean:
        rm -fv core* $(PROG) $(OBJS)

cleaner: clean
        rm -fv #* *~

当我编译它时,它给了我这个错误:

/usr/bin/gcc -c -g -std=c99 -Wall snmpy.o main.o -o snmpy
gcc: snmpy.o: linker input file unused because linking not done
gcc: main.o: linker input file unused because linking not done

不确定是否有什么东西我做得不对,或者我没有安装什么东西。我是制作文件的小伙子。我有一段时间没有这样做过。

提前致谢!!

3 个答案:

答案 0 :(得分:5)

回复:

/usr/bin/gcc -c -g -std=c99 -Wall snmpy.o main.o -o snmpy

命令中的-c选项意味着编译(但不要链接)。结果将是.o(对象)文件。

尝试不使用-c的命令,它应该链接并创建snmpy可执行文件。

答案 1 :(得分:4)

通过: -

# Build the executable file
$(PROG): $(OBJS)
    $(CC) $(CFLAGS) $(OBJS) -o $(PROG)

由于CFLAGS包含-c,您说在链接阶段也使用-c

你真的想要: -

$(PROG): $(OBJS)

Make应该为你做其余的事。

你也可能失去*.o目标。

答案 2 :(得分:2)

您需要丢失-c选项才能进行完整链接。 -c只会导致源文件被编译为*.o个文件。

这是man gcc调用关于-c选项

的说法
  

-c 编译或汇编源文件,但不要链接。链接    阶段根本就没有完成。最终的输出形式是    每个源文件的目标文件。

     

默认情况下,源文件的目标文件名由     用.o。

替换后缀.c,.i,.s等      

无法识别的输入文件,不需要编译或汇编,     被忽略了。