如何使用共享库编译文件?
How to compile a file using a shared library?
我正在尝试编译给定 .so 文件的源代码 libfoo.so
。这个库中唯一的东西是一个函数,它只是 returns 一个数字(是的,我知道,高级的东西)。等效的头文件(我同时提供了两个,但我只应该使用 .so)被命名为 foo.h
并且函数被命名为 int foo()
.
我的源文件是main.c
:
#include <stdio.h>
#include "foo.h"
int main()
{
int x = foo();
printf("%d", x);
return 0;
}
现在,在尝试编译时我有以下命令:
gcc -Wall -fPIC -c main.c -o main.o
gcc -Wall -fPIC main.o -o main -lfoo -L.
第一个命令创建目标文件失败,输出如下错误:
fatal error: foo.h: No such file or directory
我正在使用 Ubuntu 16.04.
我也尝试过将当前位置导出到 LD_LIBRARY_PATH,正如我在其他一些答案中看到的那样。
export LD_LBIRARY_PATH=$LD_LIBRARY_PATH:machine/Desktop/lib_test
您需要从 .h
文件中获取接口定义,并且该文件 必须 位于当前目录或包含搜索路径上的目录中。
请注意,在某些系统上,文件名和路径取决于大小写。
我正在尝试编译给定 .so 文件的源代码 libfoo.so
。这个库中唯一的东西是一个函数,它只是 returns 一个数字(是的,我知道,高级的东西)。等效的头文件(我同时提供了两个,但我只应该使用 .so)被命名为 foo.h
并且函数被命名为 int foo()
.
我的源文件是main.c
:
#include <stdio.h>
#include "foo.h"
int main()
{
int x = foo();
printf("%d", x);
return 0;
}
现在,在尝试编译时我有以下命令:
gcc -Wall -fPIC -c main.c -o main.o
gcc -Wall -fPIC main.o -o main -lfoo -L.
第一个命令创建目标文件失败,输出如下错误:
fatal error: foo.h: No such file or directory
我正在使用 Ubuntu 16.04.
我也尝试过将当前位置导出到 LD_LIBRARY_PATH,正如我在其他一些答案中看到的那样。
export LD_LBIRARY_PATH=$LD_LIBRARY_PATH:machine/Desktop/lib_test
您需要从 .h
文件中获取接口定义,并且该文件 必须 位于当前目录或包含搜索路径上的目录中。
请注意,在某些系统上,文件名和路径取决于大小写。