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



我在/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.

我做错了什么?

顺便说一句,你好。c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <enc.h>
#include <checksum.h>
// code here.. 

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

-I/Users/koraytugay

除了缺少-I.开关将当前目录带入include路径之外,链接规范应该读取-lsec,而不是-libsec。链接器获取-l开关之后的字符串,在lib前面加上前缀,然后查找该字符串。换句话说,-lfoo意味着在链路路径上应该有一个libfoo.a(静态)或libfoo.so(共享)文件(其本身由-L交换机指定)。

#include文件有两种方法:使用"..."和使用<...>

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

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

第一种方法应该用于系统头以及不直接包含在项目中的库的头,而第二种方法应该优先用于直接属于项目的头。

相关内容

  • 没有找到相关文章

最新更新