`

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动态库.so嵌套.so文件

    在Linux系统中,动态库(.so文件)是程序运行时加载的共享对象,它们提供了函数和数据供其他程序调用。"LINUX动态库.so嵌套.so文件"的主题涉及了如何在一个动态库中嵌入另一个动态库,这种技术通常用于代码重用和...

    arm64下的libopencv*.so+libopencv*.so.3.2文件

    在Linux系统中,".so"文件是共享对象文件,相当于Windows操作系统中的DLL动态链接库。这些文件包含了运行时程序需要调用的函数和数据,使得开发者无需将所有代码都编译进应用程序,从而减小了程序的大小并提高了性能...

    libpthread.so.0

    在Linux操作系统中,`libpthread.so.0`是一个至关重要的共享库,它包含了实现线程功能的接口和代码。这个库是POSIX线程(通常称为pthreads)在Linux上的实现,是多线程编程的核心组成部分。了解`libpthread.so.0`...

    liblept.so.5

    这里我们关注的焦点是"liblept.so.5",这是一个动态链接库文件,主要用在Linux环境下,用于图像处理相关的操作。在Windows系统中,这类功能通常由.dll文件提供,而在Linux中则是通过.so(共享对象)文件实现。 ...

    so编写和Python调用.so文件

    `.so`文件是Linux系统中的动态链接库,它包含可被其他程序共享的函数和数据。 首先,我们要理解什么是`.so`文件。`.so`是"shared object"的缩写,类似于Windows平台的`.dll`文件。它们是可执行代码和数据的集合,...

    android串口程序 含有串口静态库.so文件

    这是Shared Object file(共享对象文件)的缩写,相当于Linux和Android系统中的动态链接库。在Android中,`.so` 文件用于提供原生库服务,这些服务可以在Java层通过Java Native Interface (JNI) 访问。静态库则是将...

    QNX系统中添加自己编译的.so库.zip_QNX .so文件_SO打包_qnx文件_qnx系统g++编译_so库

    9. **版本管理**:在多版本库共存的场景下,考虑使用版本号来区分库,如libMyLib.so.1.0。这样可以避免版本冲突,并允许同时使用旧版和新版库。 通过以上步骤,你可以成功地在QNX系统中添加和使用自编译的.so库。...

    Android 编程 在 Linux 环境下创建.so动态库

    在Android编程中,有时我们需要利用C或C++的性能优势,这时就需要在Linux环境下创建`.so`(共享对象)动态库。`.so`文件是Android系统中的本地代码库,允许Java应用程序通过Java Native Interface (JNI)调用C或C++的...

    library_linux.tar.gz

    libcrypto.so.0.9.8是OpenSSL库的一部分,用于提供加密算法实现,包括对称加密、非对称加密、哈希函数等。OpenSSL是一个强大的安全套接字层密码库,广泛应用于HTTPS、TLS/SSL协议以及电子邮件和其他通信的加密。 3...

    opencv-4.5.5编译后的jar包和linux平台的so文件

    2. **环境变量配置**:在Linux环境下,可能需要将库文件路径添加到`LD_LIBRARY_PATH`环境变量中,以便系统能找到并加载.so文件。 3. **版本兼容性**:确保使用的OpenCV Java库版本与项目的其他依赖库相兼容,避免...

    libpthread.so

    掌握libpthread.so库的使用,对于提升在Linux环境下开发高效并发程序的能力具有重要意义。在实际开发中,正确理解和运用libpthread.so,不仅可以提高代码的执行效率,还能避免因线程不安全导致的诸多问题。

    libXp.so.6.zip

    libXp.so.6是这个库的特定版本,表示该库的第六个主要修订版,.so是“共享对象”(Shared Object)的缩写,这是Linux下的动态链接库文件格式。 在这个压缩包里,我们有两个文件:libXp-1.0.0-8.1.el5.i386.rpm和libXp...

    cgi-include-and-lib.rar_CGI linux_Linux cgi_cgi_libcgi.so

    这是一个动态链接库文件,通常在Linux系统中,".so"是Shared Object的缩写,意味着这个文件是一个可以被多个程序共享的代码库。`libcgi.so`可能是实现了CGI接口的库,它提供了一系列函数供开发者调用,以实现CGI程序...

    libmysqlclient.so.18.0.zip

    如果缺少libmysqlclient.so.18.0.0,这可能是因为在构建或配置Hue环境时,没有正确地包含MySQL客户端库,或者系统的库路径没有设置正确,使得Hue在运行时找不到所需的库文件。 解决这个问题的方法通常包括以下几个...

    libpng12.so.0.zip

    《Linux系统中的libpng12.so.0库文件详解及VCS应用》 在Linux操作系统中,动态链接库是程序运行的重要组成部分。这些库文件提供了许多预编译的函数和数据结构,使得开发者无需重复编写相同的代码,从而提高了效率。...

    libc-2.5.so.zip

    `libc`库是Linux环境下的核心组件之一,它的主要功能包括: 1. **系统调用接口**:`libc`为C程序员提供了封装好的系统调用接口,如打开、关闭文件(`open`, `close`),读写数据(`read`, `write`),进程控制(`...

    UNIX下如何编写.so文件

    .so文件是UNIX/Linux系统中的动态链接库文件格式。它们可以被多个应用程序共享和重用,从而减少了内存占用并提高了程序间的互操作性。创建.so文件通常涉及以下几个步骤:编写源代码、编译源代码为对象文件、使用链接...

    libgsl 动态库 ,静态库 libgslcblas.lib libgsl.lib gsl.lib gsl.dll

    在Linux环境下,动态库的扩展名为.so。 在Cygwin环境下,我们可以利用其模拟Linux环境的功能,编译和运行Linux程序。libgsl的动态库(.dll或.so)和静态库(.lib)在此环境中有着重要作用。动态库在编译时只需链接...

    libmwins.so

    首先,libmwins.so是一个Linux系统下的动态链接库,其后缀.so是"shared object"的缩写,表明这是一个可以被多个进程共享的代码库。在MATLAB中,这样的库文件主要负责提供特定的功能支持,比如图形用户界面(GUI)的...

    libstdc++.so.6.0.21

    "libstdc++"是C++标准库的名称,"so"代表“共享对象”(Shared Object),这是Linux下动态链接库的文件类型标识。".6.0.21"则表示这个库的版本号,6.0.21意味着这是第六次主要更新,次要版本为0,修订版本为21。随着...

Global site tag (gtag.js) - Google Analytics