为什么我不能编译我的 C 代码?
Why can't I compile my C code?
我在 /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.
我做错了什么?
顺便说一句,hello.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <enc.h>
#include <checksum.h>
// code here..
您尝试包含 enc.h
,但它不在您的包含路径中。您可以将其添加到您的 gcc 调用中以解决此问题:
-I/Users/koraytugay
#include
文件有两种方法:"..."
和 <...>
。
基本上两者都是实现定义的:
<...>
搜索 "a sequence of implementation-defined places",通常称为包含路径。
"..."
搜索"in an implementation-defined manner",一般是父文件的目录。如果找不到文件,则使用 <...>
方式(包含路径)。
第一种方式应该用于系统头以及不直接包含在项目中的库的头,而第二种方式是直接属于项目的头。
除了缺少 -I.
将当前目录带入包含路径的开关之外,link 规范应该是 -lsec
,而不是 -libsec
。 linker 在 -l
开关之后获取字符串,在 lib
之前添加并查找它。换句话说,-lfoo
意味着 link 路径上应该有一个 libfoo.a
(静态)或 libfoo.so
(共享)文件(它本身是用 -L
开关)。
我在 /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.
我做错了什么?
顺便说一句,hello.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <enc.h>
#include <checksum.h>
// code here..
您尝试包含 enc.h
,但它不在您的包含路径中。您可以将其添加到您的 gcc 调用中以解决此问题:
-I/Users/koraytugay
#include
文件有两种方法:"..."
和 <...>
。
基本上两者都是实现定义的:
<...>
搜索 "a sequence of implementation-defined places",通常称为包含路径。"..."
搜索"in an implementation-defined manner",一般是父文件的目录。如果找不到文件,则使用<...>
方式(包含路径)。
第一种方式应该用于系统头以及不直接包含在项目中的库的头,而第二种方式是直接属于项目的头。
除了缺少 -I.
将当前目录带入包含路径的开关之外,link 规范应该是 -lsec
,而不是 -libsec
。 linker 在 -l
开关之后获取字符串,在 lib
之前添加并查找它。换句话说,-lfoo
意味着 link 路径上应该有一个 libfoo.a
(静态)或 libfoo.so
(共享)文件(它本身是用 -L
开关)。