为什么我不能编译我的C代码?

时间:2015-04-07 18:33:55

标签: c linker include include-path

我在 / Users / koraytugay

下有这3个文件
checksum.h
enc.h
libsec.a

libsec.a是一个存在checksum.o和enc.o

的存档文件
Korays-MacBook-Pro:~ koraytugay$ nm libsec.a

libsec.a(enc.o):
0000000000000090 s EH_frame0
0000000000000000 T _enc
00000000000000a8 S _enc.eh
                 U _strlen

libsec.a(checksum.o):
0000000000000078 s EH_frame0
0000000000000000 T _checkSumFor
0000000000000090 S _checkSumFor.eh
Korays-MacBook-Pro:~ koraytugay

这是我尝试编译hello.c文件的方法:

Korays-MacBook-Pro:HelloWorld koraytugay$ gcc hello.c -L/Users/koraytugay -libsec -o koko.out
hello.c:4:10: fatal error: 'enc.h' file not found
#include <enc.h>
         ^
1 error generated.

我做错了什么?

Btw,hello.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <enc.h>
#include <checksum.h>

// code here.. 

3 个答案:

答案 0 :(得分:2)

您尝试添加enc.h,但它不在您的包含路径中。您可以将其添加到您的gcc调用中以修复该问题:

-I/Users/koraytugay

答案 1 :(得分:1)

除了缺少-I.切换以将当前目录带入包含路径之外,链接规范应该是-lsec,而不是-libsec。链接器在-l开关之后接受字符串,前置lib,并查找该字符串。换句话说,-lfoo意味着链接路径上应该有libfoo.a(静态)或libfoo.so(共享)文件(它本身是使用-L开关指定的)。

答案 2 :(得分:0)

#include文件的方法有两种:"..."<...>

基本上两者都是实现定义的:

  • <...>搜索“一系列实现定义的地方”,通常称为包含路径。
  • "..."以“实现定义的方式”搜索,该方式通常是父文件的目录。如果找不到该文件,则使用<...>方式(包含路径)。

第一种方式应该用于系统头文件以及不直接包含在项目中的库的头文件,而第二种方法是首选属于项目的头文件。