首页 > 系统相关 >linux 动态库生成

linux 动态库生成

时间:2023-08-14 16:25:08浏览次数:31  
标签:选项 bin fPIC 生成 linux test 动态 代码

命令:g++ -Iinclude test.cpp -fPIC -shared -Wall -m64 -std=c++11 -O0 -g -o bin/test.so

-g++: 编译器的名称

-Iinclude: 添加了一个头文件搜索路径,包含名为"include"的目录

test.cpp: 被编译的源文件

-fPIC: 生成位置无关代码(Position Independent Code)

-shared: 生成共享库

-Wall: 启用所有警告信息

-m64: 生成64位的目标代码

-std=c++11: 使用C++11标准进行编译

-O0: 禁用优化选项

-g: 生成调试信息

-o bin/test.so: 将输出的共享库命名为"bin/test.so"

 

-fPIC 是 g++ 编译器的一个选项,用于生成位置无关代码(Position Independent Code)。这个选项通常在编译共享库(动态链接库)时使用。

位置无关代码是一种可以被加载到内存的任意地址上并仍然可以正确执行的代码。通过生成位置无关代码,可以使得共享库可以在不同的内存地址空间中重定位,提供更大的灵活性和可移植性。

具体来说,-fPIC 选项会告诉编译器生成适用于位置无关代码的汇编和目标文件。在链接过程中,再将这些位置无关的目标文件合并成最终的共享库文件。

需要注意的是,-fPIC 选项可能会导致一些性能损失,因为位置无关代码的访问方式相对较慢。因此,只有在需要生成共享库时才需要使用 -fPIC 选项。对于可执行程序或静态库,一般不需要使用该选项。

总结起来,-fPIC 是用于生成位置无关代码的 g++ 编译器选项,在编译共享库时使用,以提供更好的可移植性和灵活性。

 

换一种写法

写入test.sh中

#! /usr/bin/bash

INCLUDE=include

CFLAGS= -Wall -m64 -std=c++11 -O0 -g

g++ -I$INCLUDE test.cpp -fPIC -shared $CFLAGS -o  bin/test.so

标签:选项,bin,fPIC,生成,linux,test,动态,代码
From: https://www.cnblogs.com/callmesblog/p/17629008.html

相关文章

  • Linux的Nginx安装部署
    简介Nginx(enginex)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。同Tomcat一样,Nginx可以托管用户编写的WEB应用程序成为可访问的网页服务,同时也可以作为流量代理服务器,控制流量的中转。Nginx在WEB开发领域,基本上也是必备组件之一了。安装Nginx......
  • 9.2 Linux LED 驱动开发实验
    一、Linux下的LED驱动原理  Linux下的任何驱动,最后都是要配置相应的硬件寄存器。1.地址映射  MMU全称叫做MemoryManageUnit,也就是内存管理单元。现在的Linux支持无MMU处理器。MMU主要完成的功能为:  1、完成虚拟空间到物理空间的映射。  2、内存保护,设......
  • 阿里云微服务引擎 MSE 2023 年 7 月产品动态
    ......
  • Linux的Tomcat安装部署
    简介Tomcat是由Apache开发的一个Servlet容器,实现了对Servlet和JSP的支持,并提供了作为web服务器的一些特有功能,如Tomcat管理和控制平台,安全域管理和Tomcat阀等。简单说,Tomcat是一个WEB应用程序的托管平台,可以让用户编写的WEB应用程序,被Tomcat所托管,并提供网站服务。即让用......
  • 玩转Linux必不可少的命令之tar
    ❝在linux操作中,我们经常对文件进行操作,比如移动、复制等。单个文件的时候很好操作,但是一但文件比较多的情况下,我们最好的办法就是压缩打包,而tar命令可以帮助我们实现打包、解压的操作!❞什么是Tar它是Unix和类Unix系统上的压缩打包工具,可以将多个文件合并为一个文件,打包后的文件后......
  • nohup定时日志分割每天生成一个日志文件
    使用nohup启动java后台程序时,默认生成的日志文件保存在nohup.out中,随着时间的推移日志文件会越来越大,非常不方便查。所以如果一天生成一个日志文件,则每个日志文件户小很多,方便打开查看。下边介绍如何定时每天生成一个日志文件1、创建shell脚本首先创建一个log.sh的shell脚本,内容......
  • linux uart驱动
    注:该文档对应的linux版本为linux4.9,以hi3559uart芯片驱动为例一、uart驱动加载hi3559对应的uart驱动文件为drivers/tty/serial/amba-pl011.c,然而,该文件中的compatible与设备树中的并不匹配。因为这里不使用compatible匹配,而是使用amba_id匹配,所以串口的初始化入口函数为pl......
  • 列表生成式会忽略空bytes数值
    list_strip=[i.strip()foriinstr_result]list_result=[]foriinlist_strip:#判断是否为十六进制,且非空if(is_hex(i.decode()))and(len(i)>0):list_result.append(i)list_result改进list_filter=[i.strip()foriinstr_resultifi.stri......
  • 在安卓手机上安装完整kali linux nethunter 系统
    KALI官方给出的NETHUNTER手机建议              手机型号设备ID     操作系统  基于安卓版本   首选高端设备是一家7/7pro              OOS      安卓......
  • 医疗设备软件静态和动态分析的 5 个技巧(下)
    上一篇文章医疗设备软件静态和动态分析的5个技巧(上)中我们简单介绍了医疗设备软件关于风险方面的相关背景和两个技巧。这篇文我们将继续介绍剩下的三个技巧,以及如何管理风险。4.动态分析静态分析将源代码解析为文本,并在不执行单个指令的情况下根据解析器输出得出所有结果,而动态应......