`

linux下构建 共享函数库(.so)

阅读更多
在Linux上用C创建共享库so
1、创建math1.c,在命令行中输入:nano math1. c
int add(int x, int y)
{
  return x+y;
}

2、编译生成共享库libmath1.so
gcc -fPIC -shared -olibmath1.so math1.c

3、创建测试程序testmath.c,在命令行中输入:nano testmath. c
#include <stdio.h>
int main()
{
  int x=10, y=18;
  int sum = add(x, y);
  printf("%d+%d=%d\n", x, y, sum);
  return 0;
}


4、编译生成测试程序testmath
gcc -otestmath -lmath1 testmath.c -L=./

5、运行测试程序,在命令行中输入:./testmath
出现找不到共享库的错误:
./testmath: error while loading shared libraries: libmath1.so: cannot open shared object file: No such file or directory

6、拷贝libmath1.so到Linux系统默认的共享库加载路径(/lib或/usr/lib)
在命令行中输入:sudo cp libmath1.so /usr/lib/

7、重新运行测试程序testmath
结果:10+18=28

关于gcc的编译参数:
-fPIC 生成与位置无关的代码,这样库就可以在任何位置被连接和装载
-shared 代表共享库
-o 链接生成指定名字的库或程序
-l 指定要链接的共享库
-L 指定共享库所在路径
分享到:
评论

相关推荐

    Linux下动态连接.doc

    -&gt; 在运行时与共享库(lib*.so)动态链接,通过动态链接装入器,将动态库映射进应用程序 的可执行内存中。在启动应用程序之前,动态链接器将所需的共享库映射到应用的内存, 或者使用系统共享的目标并为应用程序解析所...

    linux网路编程 中文 23M 版

    2.1 Linux环境下的编辑器................................................. 14 2.1.1 v i m使用简介...................................................14 2 . 1 . 2使用v i m建立文件............................

    libAPFEL0-3.0.4-bp153.1.1.armv7hl.rpm

    libAPFEL0-3.0.4-bp153.1.1.armv7hl.rpm 是一个针对 armv7hl 架构的 RPM 包,...RPM 包还列出了一些依赖项,例如 libc.so.6、libgcc_s.so.1、libgfortran.so.4、libm.so.6 和 libstdc++.so.6。请确保这些依赖项已满足。

    为Linux应用程序编写DLL程序函数

    Linux 中的应用程序以以下两种方式之一链接到外部函数:要么在构建时与静态库( lib*.a)静态地链接,并且将库代码包含在该应用程序的可执行文件里;要么在运行时与共享库( lib*.so)动态地链接。通过动态链接装入...

    libAPFEL0-3.0.4-lp152.2.15.x86-64.rpm

    libAPFEL0-3.0.4-lp152.2.15.x86_64.rpm 是一个针对 x86_64 架构的 RPM 包,...RPM 包还列出了一些依赖项,例如 libc.so.6、libgcc_s.so.1、libgfortran.so.4、libm.so.6 和 libstdc++.so.6。请确保这些依赖项已满足。

    libAPFEL0-3.0.4-bp153.1.71.x86-64.rpm

    - 提供的功能:概率分布函数演化库 - Summary(摘要):APFEL 是一个用于执行部分子分布的 QCD+QED DGLAP 演化的库。 - 提供的文件: - /usr/lib64/libAPFEL.so.0 - /usr/lib64/libAPFEL.so.0.0.0 - /usr/lib64/...

    sharedlibpp:微小的跨平台插件系统(dll、so、dylib)

    sharedlibpp 提供了一种简单且可移植的方法来创建插件,这些插件将您的 c++ 类封装在共享库(so、dylib、dll)中。 原始代码取自 (Yet Another Robot Platform)。 通过删除依赖项简化了代码,并添加了一些帮助...

    RBBComp:bbcomp 的非官方 R 绑定(黑盒优化竞赛 - http

    运行此代码为 R 构建共享库。 $ make -f Makefile-Linux 将 RProxy.so、libbbcomp.so(从下载用于您自己架构的二进制文件)和 RBBComp.r 放在您的 LD_LIBRARY_PATH 中。 以 C 的 bbcomp 官方文档中描述的方式...

    操作系统(内存管理)

    文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...

    内存管理内存管理内存管理

    实现这些需求的程序库称为分配程序(allocators),因为它们负责分配和回收内存。程序的动态性越强,内存管理就越重要,您的内存分配程序的选择也就更重要。让我们来了解可用于内存管理的不同方法,它们的好处与...

Global site tag (gtag.js) - Google Analytics