1.概要
2.代码
2.1 main.c
#include <stdio.h>
#include "lib1.h"int main(){printf("hello word\n");int a = add(2,3);printf("%d\n",a);return 0;
}
2.2 lib1.c
#include "lib1.h" int add(int a,int b){return a+b;
}
2.3 lib1.h
#ifndef MYLIB_H
#define MYLIB_H int add(int a, int b); #endif //MYLIB_H
3.运行结果
3.1 编译类库结果
gcc -shared -o lib1.so lib1.c
3.2 运行主函数的结果
xjc@US-PF20F37R:~/objects/tests/t12$ gcc -o main main.c -L/home/xjc/objects/tests/t12 -l1
xjc@US-PF20F37R:~/objects/tests/t12$ export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
xjc@US-PF20F37R:~/objects/tests/t12$ ./main
hello word
5
xjc@US-PF20F37R:~/objects/tests/t12$
4.附加
4.1 c 编译动态链接库
在C语言中,你可以创建一个动态链接库(也称为共享库),这允许你在多个程序之间共享代码。以下是在Unix-like系统(如Linux或macOS)上使用GCC编译器创建动态链接库的基本步骤:
- 编写源代码
首先,你需要编写你的C源代码。例如,我们创建一个简单的函数,该函数接受两个整数参数并返回它们的和。将此代码保存为mylib.c
。
#include "mylib.h" | |
int add(int a, int b) { | |
return a + b; | |
} |
同时,你需要一个头文件(例如mylib.h
)来声明这个函数:
#ifndef MYLIB_H | |
#define MYLIB_H | |
int add(int a, int b); | |
#endif //MYLIB_H |
- 编译为动态链接库
使用GCC编译器,你可以通过以下命令将源代码编译为动态链接库:
gcc -shared -o libmylib.so mylib.c |
这里,-shared
选项告诉GCC你要创建一个共享库,-o libmylib.so
指定输出文件的名称(在这种情况下是libmylib.so
)。你可以根据需要更改这个名称。
3. 使用动态链接库
一旦你有了动态链接库,你就可以在其他C程序中使用它。为此,你需要在编译时包含库,并在运行时确保库在系统的库路径中或指定库的路径。
例如,如果你有一个名为main.c
的程序,它使用了你的库中的函数,你可以这样编译它:
gcc -o main main.c -L. -lmylib |
在这里,-L.
告诉GCC在当前目录中查找库,-lmylib
指定要链接的库(注意,-l
选项后面的库名应去掉前面的lib
和后缀.so
)。
4. 运行程序
在运行程序之前,确保动态链接库在系统的库路径中,或者你可以通过设置LD_LIBRARY_PATH
环境变量来指定库的路径。例如:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH | |
./main |
这将把当前目录添加到库路径中,然后你可以运行你的程序。
请注意,上述步骤是针对Unix-like系统的。如果你在Windows上,过程会有所不同,特别是库的命名和编译选项。在Windows上,你可能会使用.dll
作为动态链接库的后缀,并使用不同的编译器选项来创建它们。
2. c 如何使用自定义的动态链接库
在C语言中,使用自定义的动态链接库(也称为共享库)涉及几个步骤。这里是一个基本的指南,展示了如何在Unix-like系统(如Linux或macOS)上创建和使用自定义的动态链接库。
1. 编写源代码
首先,你需要编写库的源代码和头文件。
mylib.h
(头文件):
#ifndef MYLIB_H | |
#define MYLIB_H | |
int add(int a, int b); | |
#endif //MYLIB_H |
mylib.c
(源文件):
#include "mylib.h" | |
int add(int a, int b) { | |
return a + b; | |
} |
2. 编译动态链接库
使用GCC编译器将源代码编译为动态链接库。
gcc -shared -o libmylib.so mylib.c |
3. 编写使用库的程序
现在,你可以编写一个C程序来使用这个库。
main.c
(使用库的程序):
#include <stdio.h> | |
#include "mylib.h" | |
int main() { | |
int sum = add(2, 3); | |
printf("The sum is: %d\n", sum); | |
return 0; | |
} |
4. 编译并链接到动态链接库
编译你的程序时,需要链接到你的动态链接库。你需要告诉编译器在哪里找到库文件(使用-L
选项),以及要链接的库名(使用-l
选项,注意去掉lib
前缀和.so
后缀)。
gcc -o main main.c -L. -lmylib |
这里,-L.
告诉编译器在当前目录中查找库。
5. 运行程序
在运行程序之前,你需要确保动态链接库在系统的库路径中,或者你可以通过设置LD_LIBRARY_PATH
环境变量来指定库的路径。
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH | |
./main |
这里,:$LD_LIBRARY_PATH
确保你不会覆盖现有的库路径。
如果你不想设置LD_LIBRARY_PATH
,你可以将库文件复制到系统的标准库路径中,如/usr/local/lib
(可能需要root权限)。或者,你可以在编译时使用-Wl,-rpath
选项来指定运行时库的搜索路径。
6. 清理
在开发过程中,你可能想要清理生成的文件。你可以使用make
工具或简单地使用rm
命令来删除它们。
rm -f libmylib.so main |
然后,你可以重新编译和链接你的库和程序。