在linux下制作libxxx.so 动态库

在linux下面动态库的使用是非常常用的,也是非常实用的。

步骤一:

创建一个.h头文件 ,头文件中声明动态库中的函数

#ifndef _TEST_H_
#define _TEST_H_

#ifdef __cplusplus       /*c c++ 混合编程*/
extern "C" {
#endif                   <span style="font-family: Arial, Helvetica, sans-serif;">/*c c++ 混合编程*/</span>

int max(int a, int b);
int add(int a, int b);

#ifdef __cplusplus        <span style="font-family: Arial, Helvetica, sans-serif;">/*c c++ 混合编程*/</span>

}
#endif                   <span style="font-family: Arial, Helvetica, sans-serif;">/*c c++ 混合编程*/</span>

#endif

步骤二:

创建.c文件实现头文件中的函数

int max(int a, int b){
        if (a > b){
                return a;
        }else{
                return b;
        }
}

int add(int a, int b){
        return a+b;
}
步骤三:
<span style="white-space:pre">	</span>编写makefile文件 ,在编译命令中添加 -shared 参数
<span style="white-space:pre">	</span>在链接命令中添加 -fPIC 参数
<span style="white-space:pre">	</span><pre style="line-height: 28px; white-space: pre-wrap; color: rgb(105, 105, 105); background-color: rgb(255, 255, 255);"><pre style="white-space: pre-wrap;"><span style="font-size:14px;"><span style="color: rgb(255, 0, 0);"><span style="white-space:pre">	</span>-shared:</span> 该选项指定生成动态连接库;
<span style="color: rgb(255, 0, 0);">        -fPIC:</span>表示编译为<span style="color: rgb(255, 0, 0);">位置独立(地址无关)</span>的代码,不用此选项的话,编译后的代码是位置相关的,所以动态载入时,是代码拷贝的方式</span>
        -L:指定链接库的路径,-L. 表示要连接的库在当前目录中
       -ltest:指定链接库的名称为test,编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称
       -Wl,-rpath: 记录以来so文件的路径信息。
       LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。
      当然如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的,
      不过如果没有root权限,那么只能采用修改LD_LIBRARY_PATH环境变量的方法了。
.SUFFIXES:.c.o
CC = gcc
SRC = test.c
OBJK = $(SRC:.c=.o)
EXEC = libtest.so
start: $(OBJK)
        $(CC) -shared -o $(EXEC) $(OBJK)
        @echo ---------------ok-------------------
.c.o:
        $(CC) -Wall -fPIC -g -o [email protected] -c $< 
clean:
        rm -f $(OBJK)
        rm -f $(EXEC)
        rm -f core.*

使用该动态库
	gcc -L/动态库所在路径 使用该动态库.c文件 -lXXX 动态库名
                                                                         

				
时间: 2024-10-15 05:23:30

在linux下制作libxxx.so 动态库的相关文章

indy openssl lazarus 编程linux下出现不能装载动态库的问题原因!

版本不对的原因. 具体在10.5.9下修改此参数即可解决问题. LoadFunction() has an ACritical parameter. It is set to True by default, but can be set to False for individual functions (and currently is False for TLS 1.1+ and DTLS functions). You can patch IdSSLOpenSSLHeaders.pas

Linux下gcc编译控制动态库导出函数小结

Linux下gcc编译控制动态库导出函数小结 来源 https://www.cnblogs.com/lidabo/p/5703890.html 根据说明文档“How To Write Shared Libraries"介绍, 有四种方法: 1. 在方法声明定义时,加修饰:__attribute__((visibility("hidden"))) 就是说将不公开的函数都加上这个属性,没加的就是可见的 2. gcc 在链接时设置 -fvisibility=hidden,则不加 v

linux下,一些关于动态库的问题:

程序运行是加载动态库的几种方法: 第一种,通过ldconfig命令    ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令它,ldconfig命令通常在系统启动时运行,而当一个用户安装我新的动态库时,就需要手工运行这个命令.ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(

linux下C语言编程动态库so的编写及调用

//test_so.h #include <stdio.h> void test_a(); void test_b(); //test_a.c #include "so_test.h" void test_a() { printf("this is in test_a...\n"); } //test_b.c #include "so_test.h" void test_b() { printf("this is in te

Windows 下VC++6.0制作、使用动态库和静态库

Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一个.cpp和一个.h(C++header file)文件 2..cpp程序直接照老师给的打,注意这里需要改错,去掉(long) 3. .h文件需要自己编写格式如下.以head.h为例 #ifndef _HEAD_H_ #define _HEAD_H_ unsigned long unsgn_pow(

如何让linux加载当前目录的动态库

debian从7.0开始支持multiarch,64位库的路径改到/usr/lib/x86_64-linux-gnu了,mint.ubuntu这些衍生版有没有跟着改我就不清楚了. deepin linux 是基于debian的,所以库路径也是/usr/lib/x86_64-linux-gnu # 如何让linux加载当前目录的动态库 --------------------------- linux的excutable在执行的时候缺省是先搜索/lib和/usr/lib这两个目录,然后按照ld.s

linux下制作win7安装U盘

http://blog.csdn.net/pipisorry/article/details/41369821 已装linux,再用U盘安装win7(网络安装应该也可以), 先要在linux里面制作一个win7安装U盘(windows下用ultraiso制作也可以),直接用dd命令是不可以的,缺少引导信息.[其实也可以ref] 需要fdisk.mkfs.ntfs.ms-sys.win7 .ISO.>4GU盘 1. 用fdisk在U盘上建立一个ntfs分区,编辑flag,勾上boot选项 fdis

Linux下C语言使用openssl库进行加密

在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum filename.txt计算md5值 ==> b1946ac92492d2347c6235b4d2611184  .虽然写入的是hello这5个字符,但是我们使用命令xxd filename.txt后可以看出文件结尾处会有个0x0a这个回车符.所以在下面的代码中才会有\n. 1 //打开/usr/

Linux下为PHP添加扩展库

例子:添加mbstring扩展库 1. 进入PHP源码目录(没有源码的可以先用命令:# php -v 查看版本号,然后上PHP官网下载源码) 2. 进入PHPi源码下的FTP扩展库的目录: # cd [Your PHP Source Folder]/ext/mbstring 3. 使用 phpize 命令生成配置文件: # phpize 4. 执行configure: # ./configure --with-php-config=/usr/local/php/bin/php-config  (