linux 环境下动态链接库试验

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编译器创建动态链接库的基本步骤:

  1. 编写源代码

首先,你需要编写你的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
  1. 编译为动态链接库

使用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

然后,你可以重新编译和链接你的库和程序。

相关推荐

  1. linux 环境动态试验

    2024-06-13 16:18:05       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-13 16:18:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-13 16:18:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-13 16:18:05       87 阅读
  4. Python语言-面向对象

    2024-06-13 16:18:05       96 阅读

热门阅读

  1. 如何通过Python爬虫提升电商数据分析效率

    2024-06-13 16:18:05       35 阅读
  2. 新需求:实现一个自动运维部署工具

    2024-06-13 16:18:05       27 阅读
  3. 编程里len是什么意思:深度解析与应用探讨

    2024-06-13 16:18:05       27 阅读
  4. 【DPDK学习路径】五、线程创建及核心绑定

    2024-06-13 16:18:05       30 阅读
  5. 浅拷贝与深拷贝全面解析及实战

    2024-06-13 16:18:05       28 阅读
  6. js点击切换的轮播图

    2024-06-13 16:18:05       31 阅读
  7. 使用 ftrace 进行内核跟踪

    2024-06-13 16:18:05       45 阅读
  8. 使用canvas制作一个无人机旋转特效

    2024-06-13 16:18:05       26 阅读
  9. Linux使用过程中的一些技巧

    2024-06-13 16:18:05       22 阅读
  10. 僵尸进程与孤儿进程

    2024-06-13 16:18:05       25 阅读