【发布时间】:2014-12-17 09:25:09
【问题描述】:
我正在尝试使用以下代码编译共享库 (.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 中的同一个库中使用它。 我知道我正在尝试做的事情是可能的,但我无法做到。 请问我该怎么做。
【问题讨论】:
-
您尝试过
gcc -o libreceive.o -c libreceive.c -I /Path/to/include吗?考虑到您的libreceive.h在目录include中。 -
libreceive 是我要编译的库
-
在这种情况下,你必须在 gcc 中使用
-shared或-fPIC选项,没有提及吗? -
我也试过这个:gcc -shared -o libreceive.so -fPIC libreceive.c 在很多变种中,没有运气......
-
@user1928596 如果
libreceive.c与libreceive.h在同一文件夹中,则可以在libreceive.c中使用#include "libreceive.h"。在任何其他想要使用 libreceive 的项目中,您可以使用#include <libreceive/libreceive.h>和编译器标志-I/path/to,其中 /path/to 包含一个 libreceive 文件夹,(意味着libreceive.h的完整路径是/path/to/libreceive/libreceive.h)跨度>
标签: c gcc shared-libraries