静态库 .a 转成共享库 .so_.a能转为.so吗-程序员宅基地

技术标签: Linux开发  静态库 .a 转成共享库 .so  

.a 是有一系列 .o 文件通过 ar 程序打包在一起的静态库,要把它转成动态库只需先解开,生成一堆 .o 文件,再通过编译器(比如 gcc 或 ifort,视具体情况而定)编成动态库即可。

ar -x libtest.a
gcc -shared *.o -o libtest.so

不过需要注意的是:

(1) 并非所有 .a 都能转成 .so,前提是 .a 解出的 .o 文件中含有“位置独立代码”,如果不含的话则无法生成 .so。而“位置独立代码”要求在编译生成 .a 时指定 -fpic 或 -fPIC 选项才行。所以,如果只有一个 .a 文件而没有相应源文件且这个 .a 中不含“位置独立代码”,那么它无法转成 .so 文件。

(2) 我觉得生成 .so 时应该用与生成 .a 时一样的编译器,如果不一样不知道是否会造成问题。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/vcwanglailing/article/details/73369210

智能推荐

光流、warp和grid_sample()_pytorch warp-程序员宅基地

文章浏览阅读964次,点赞2次,收藏11次。光度是指不是亮度,也不是一个物理量,用于光度函数。光度函数指的是任意频率的光和波长为550nm的光产生同样亮暗感觉所需的辐射通量之比。光度一致性假设是指同一空间的点在不同视角的投影应当具有相同的颜色。但由于相机曝光等因素,同一个像素点在不同视图上的光度信息存在一定差异性。因此对于夜间场景,由于非单一光源就会导致完全不满足光度一致性假设,无监督框架无法使用。_pytorch warp

PHP Session实现方式_php session实现方法-程序员宅基地

文章浏览阅读619次。你第一次访问网站时,服务端脚本中开启了Sessionsession_start();,服务器会生成一个不重复的 SESSIONID 的文件session_id();,比如在/var/lib/php/session目录并将返回(Response)如下的HTTP头 Set-Cookie:PHPSESSIONID=xxxxxxx客户端接收到Set-Cookie的头,将PHPSESSIONID写入cook..._php session实现方法

OC1 算法_oc1算法原理-程序员宅基地

文章浏览阅读1.9k次。1. 算法流程 OC1 算法大部分情况下使用确定性爬山来确保计算精度,还使用了两种随机化来避免陷入局部最小值,通过限制随机选择超平面的数量减少运行时间。2. 扰动算法 OC1 算法对超平面的方向没有限制,然而,为了接近标准的决策树算法,超平面首先被设置为该结点上效果最好的轴平行平面(即单变量决策树做出的平面)。OC1 算法只有在斜平面优于单变量平面的情况下才进行。 通过扰动现在的超平面使它偏移来寻找可能的超平面,由于超平面的存在数量是指数级,无法简..._oc1算法原理

SNMP TRAP_snmp_session pdu trap-程序员宅基地

文章浏览阅读1.2k次。今天写了一个关于snmp发trap命令的简单代码,仅供参考 #include #include #include #include #include #include #include #include #include #include"snmptrap.h"int snmptrap(trap_msg_s *p_data){ oid_snmp_session pdu trap

Android之使用LitePal操作数据库-程序员宅基地

文章浏览阅读493次。在Android中可以使用SQLiteDatabase来操作SQLite数据库,但是有一种更加简单方便的方法,那就是使用LitePal。LitePal是一款开源的Android数据库框架,下面具体对LitePal的使用方法进行说明。在使用LitePal之前需要对LitePal进行配置,分为下面三步:1.导入LitePal库编辑app/build.gradle文...

es(Elasticsearch)客户端Elasticsearch-head安装使用(04Elasticsearch-head安装篇)_elasticsearch客户端工具-程序员宅基地

文章浏览阅读4.5k次,点赞4次,收藏11次。elasticsearch-head是一款专门针对于elasticsearch的客户端工具,用来展示数据。elasticsearch-head是基于JavaScript语言编写的,可以使用npm部署,npm是Nodejs下的包管理器安裝方式利用npm和nodejs进行安装启动,github中给出的安装方法也是这种,本文就是以这种方式进行解说。............_elasticsearch客户端工具

随便推点

docker java web应用_tar -zxf /mnt/software/apache-tomcat-7.0.55.tar.gz-程序员宅基地

文章浏览阅读247次。启动容器:docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash这条命令比较长,我们稍微分解一下,其实包含以下三个部分:docker run 相关参数> 镜像 ID> 初始命令>其中,相关参数包括:-i:表示以“交互模式”运行容器-t:表示容器启动后会进入其命令行-v:表示需_tar -zxf /mnt/software/apache-tomcat-7.0.55.tar.gz -c .

flink sql demo-程序员宅基地

文章浏览阅读4.9k次,点赞2次,收藏5次。package flink.demo;import com.alibaba.fastjson.JSONObject;import com.enniu.cloud.services.riskbrain.flink.job.EnniuKafkaSource;import java.util.ArrayList;import java.util.HashMap;import java.uti..._flink sql demo

自己写的一篇git入门ppt_git讲解ppt-程序员宅基地

文章浏览阅读882次。1、主要讲了git结构、刚上上手项目从怎么使用git等自己写的ppt,上传不了文件,只能给大家截图了1、git的基本使用 git init ——初始化仓库 git status ——查看仓库的状态 git log ——查看提交日志 git diff ——查看尚未暂存的文件更新了哪些部分(工作区和暂存区) git diff --cached ——查看已经暂存和上次提交之间差异 ..._git讲解ppt

NLP预训练方法:从BERT到ALBERT详解_albert和bert输出维度-程序员宅基地

文章浏览阅读1k次。BERT基于所有层中的左、右语境进行联合调整,来预训练深层双向表征。只需要增加一个输出层,就可以对预训练的BERT表征进行微调,就能够为更多的任务创建当前的最优模型。1. 预训练优点假设已有A训练集,先用A对网络进行预训练,在A任务上学会网络参数,然后保存以备后用,当来一个新的任务B,采取相同的网络结构,网络参数初始化的时候可以加载A学习好的参数,其他的高层参数随机初始化,之后用B任务的训练数据来训练网络,当加载的参数保持不变时,称为"frozen",当加载的参数随着B任务的训练进行不断的改变,称为“f_albert和bert输出维度

功能、函数、表等-程序员宅基地

文章浏览阅读392次。表DD02L TABCLASS = 'APPEND'可以查附加结构所用处清单RS_EU_CROSSREF 函数所用处清单取includeCALLFUNCTION'RS_GET_ALL_INCLUDES'EXPORTINGprogram=lv_programTABLESincludetab=lt_inc_tmpEXCEPTIONS...

迅雷api 使用-程序员宅基地

文章浏览阅读607次。?其实C++调用一样的 1.首先导入DLL 添加引用 -> COM -> ThunderAgent 1.0 Type Library(前提是已安装迅雷)或者C:\Program Files\Thunder Network\Thunder\ComDlls\ThunderAgent_Now.dll(路径可能有所不同)2.代码: THUNDERAGENTLib.AgentClass ag...