Mac .dylib 链接找不到 Header
Mac .dylib Linking Cannot Find Header
我正在尝试使用 gcc 创建和使用 .dylib 文件。我正在使用我的 set-up 阅读教程 here,但它似乎不起作用。
我的目录结构如下:
- 来源
- hellomake.c
- hellofunc.c
- 公司
- hellomake.h
- 库
- libhellomake.dylib
我正在使用 here 中的代码。
我试着按照教程编译如下
gcc -dynamiclib -o lib/libhellomake.dylib src/hellofunc.c -Iinc
gcc -Llib -lhellomake -o hellomakesl src/hellomake.c
第一个命令成功,当我在 lib/libhellomake.dylib
上 运行 file
时,正如预期的那样,我得到:
lib/libhellomake.dylib: Mach-O 64-bit dynamically linked shared library x86_64
但是,第二个命令失败并显示以下错误消息:
src/hellomake.c:1:10: fatal error: 'hellomake.h' file not found
#include <hellomake.h>
^~~~~~~~~~~~~
1 error generated.
我做错了什么?
正在将评论转为答案。
- 您在第一个命令行中有
-Iinc
,因此编译器可以找到 header。
- 第二个没有
-Iinc
,编译器找不到header.
- 修复就像“将
-Iinc
添加到第二个命令行”一样简单明了。
In general, do .dylib
files require accompanying .h
files?
所有库都需要一个 header 来向编译器声明库中可用的功能。一些库提供(需要)几个 headers — 见证主系统 C 库和标准 C 和 POSIX headers.
标准库或系统库及其 header 与您提供的库和 header 之间的主要区别是编译器知道在哪里可以找到系统库和 headers 是自动的,而你必须告诉它在哪里可以找到你的,通常是通过 -L
和 -I
选项。如果您的库安装在 /usr/local/lib
中,而 header 安装在 /usr/local/include
中,您可能不必告诉编译器在那里搜索。
我正在尝试使用 gcc 创建和使用 .dylib 文件。我正在使用我的 set-up 阅读教程 here,但它似乎不起作用。
我的目录结构如下:
- 来源
- hellomake.c
- hellofunc.c
- 公司
- hellomake.h
- 库
- libhellomake.dylib
我正在使用 here 中的代码。
我试着按照教程编译如下
gcc -dynamiclib -o lib/libhellomake.dylib src/hellofunc.c -Iinc
gcc -Llib -lhellomake -o hellomakesl src/hellomake.c
第一个命令成功,当我在 lib/libhellomake.dylib
上 运行 file
时,正如预期的那样,我得到:
lib/libhellomake.dylib: Mach-O 64-bit dynamically linked shared library x86_64
但是,第二个命令失败并显示以下错误消息:
src/hellomake.c:1:10: fatal error: 'hellomake.h' file not found
#include <hellomake.h>
^~~~~~~~~~~~~
1 error generated.
我做错了什么?
正在将评论转为答案。
- 您在第一个命令行中有
-Iinc
,因此编译器可以找到 header。 - 第二个没有
-Iinc
,编译器找不到header. - 修复就像“将
-Iinc
添加到第二个命令行”一样简单明了。
In general, do
.dylib
files require accompanying.h
files?
所有库都需要一个 header 来向编译器声明库中可用的功能。一些库提供(需要)几个 headers — 见证主系统 C 库和标准 C 和 POSIX headers.
标准库或系统库及其 header 与您提供的库和 header 之间的主要区别是编译器知道在哪里可以找到系统库和 headers 是自动的,而你必须告诉它在哪里可以找到你的,通常是通过 -L
和 -I
选项。如果您的库安装在 /usr/local/lib
中,而 header 安装在 /usr/local/include
中,您可能不必告诉编译器在那里搜索。