我正在尝试使用以下代码编译共享库(.so):
libreceive.h文件:

#include <stddef.h>
int receive(int sockfd, void *buf, size_t len, int flags);

libreceive.c文件
#include <stddef.h>
#include <libreceive/libreceive.h>

int receive(int sockfd, void *buf, size_t len, int flags){
    return recv(sockfd, buf, len, flags);
}

这里的问题是,我试图将.h包含在我正在构建的库中,并同时从.c中的同一个库中使用它。
我知道我想做的是可能的,但我做不到。
我怎么能那么做呢。
我尝试的代码是:
gcc -o libreceive.o -c -include libreceive.h libreceive.c

我得到以下错误:
fatal error: libreceive/libreceive.h: No such file or directory
compilation terminated.

这里的问题是,我试图将.h包含在我正在构建的库中,并同时从.c中的同一个库中使用它。
我知道我想做的是可能的,但我做不到。
我怎么能那么做呢。

最佳答案

由于libreceive.hlibreceive.c似乎在同一个目录中(从编译器调用判断),通常的方法是

#include "libreceive.h"

为了使用
#include <libreceive/libreceive.h>

libreceive.h必须位于名为libreceive的目录中,并且该目录必须是include路径的一部分。实现这一目标是可能的,但我认为这在这里既没有必要也没有用处。

09-16 15:11