mymath.so共享库
共享库的使用(.so)文件
1、共享库的概念

2、创建共享库命令
# 1、将.c生成.o文件,(生成与位置无关的代码-fPIC)
gcc -c add.c -o add.o -fPIC
# 2、使用 gcc -shared 制作动态库
gcc -shared lib库名.so add.o sub.o div.o
# 3、编译可执行程序时,指定所使用的动态库。-l: 指定库名 -L: 指定库路径
gcc test.c -o a.out -l mymath -L ./lib
4.运行可以执行程序 ./a.out 出错!!!
原因 连接器 工作于链接阶段,工作时需要 -l 和 -L
动态连接器 工作于程序运行阶段,工作时需要提供动态库所在目录位置
5、解决:把动态库配置到环境变量中 (建议使用绝对路径)
export LD_LIBRARY_PATH=./lib

报错了:在加载动态库的时候出错了,库名叫 libmymath.so,不能打开共享文件,没有这个文件或者目录

2、把动态库配置到环境变量中

|
1
|
gcc -shared -fpci -o lib/libmath.so obj/mymath.o |
具体加不加 fpci 这个要看平台支持吧支持;具体详情可以查阅 shared的相关参数文档
这里有一个-fPIC参数
PIC就是position independent code
PIC使.so文件的代码段变为真正意义上的共享
如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.每个copy都不一样,取决于 这个.so文件代码段和数据段内存映射的位置.
3、使用共享库命令
|
1
2
3
4
5
|
daokr@ubuntu:/mnt/hgfs/mystudy/clession$ gcc -shared -o lib/libmymath.so obj/mymath.odaokr@ubuntu:/mnt/hgfs/mystudy/clession$ gcc -o bin/mymath_test2008 obj/mymath_test.o -Llib -lmymathdaokr@ubuntu:/mnt/hgfs/mystudy/clession$ ./bin/mymath_test2008./bin/mymath_test2008: error while loading shared libraries: libmymath.so: cannot open shared object file: No such file or directorydaokr@ubuntu:/mnt/hgfs/mystudy/clession$<br>daokr@ubuntu:/mnt/hgfs/mystudy/clession$ sudo cp lib/libmymath.so /usr/lib<br>daokr@ubuntu:/mnt/hgfs/mystudy/clession$ ./bin/mymath_test2008<br> |
注意:
这样中直接回报错;说是不能够去打开这个共享库文件;两种方式解决这个错误
1)cp libmymath.so /usr/lib (需要root用户)
2)export LD_LIBRARY_PATH=库文件的目录 (这个是临时的;在开个窗口就没啥用了;执行的
|
1
|
./bin/mymath_test2008 不会被执行 |
)
mymath.so共享库的更多相关文章
- 共享库的使用(.so)文件
1.共享库的概念 2.创建共享库命令 gcc -shared -fpci -o lib/libmath.so obj/mymath.o 具体加不加 fpci 这个要看平台支持吧支持:具体详情可以查阅 ...
- 链接(extern、static关键词\头文件\静态库\共享库)
原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = ...
- linux下共享库的注意点之-fpic
在编译共享库必须加上-fpic.这是为什么呢? 首先看一个简单的例子: #include <stdio.h> int fun1() { printf("fun1\n") ...
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- QT共享库的创建与调用(初级)(附:UI界面不能被改变的其中一个原因)
背景: 最近在做的一个项目其中一部分既是实现PC与下位机的USB通信.windows平台下已经完成,现需移植到linux平台下. 在linux系统中,通过一段时间的工作,设备已被配置成hid类(后续再 ...
- ndk学习9: 动态使用共享库
动态使用共享库函数 dll_main 环境介绍 续上节代码 目录结构: android.mk如下: LOCAL_PATH := $(call my-dir) include $(CLEA ...
- linux共享库
linux共享库 linux中共享库一般以.so.x.y.z 命名,其中x,y,z分别为主版本号.次版本号.发布版本号.同一个库,主版本号不同则相互不兼容:主版本相同,次版本号高的库比次版本号低的库有 ...
- linux C++ 共享库导出类
1.共享库的对外接口函数的声明必须加上extern “C”. 2.使用共享库对话接口函数生成的对象指针时在该对象未被释放之前不能关闭共享库句柄,否则会出现segmentation fault错误. 以 ...
- 【转载】Linux下动态共享库加载时的搜索路径详解
转载自:http://www.eefocus.com/article/09-04/71617s.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading ...
- Linux 下编译安装软件,找不到共享库 xx.so 的解决办法
编译memcached时,报错没有libevent,于是下载libevent,configure , make && make install ,然后在重新安装memcache成功之后 ...
随机推荐
- java抽象类继承抽象类和抽象方法 java抽象类继承抽象类和抽象方法
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这个原因,通常在设计阶段决 ...
- TCP连接connect函数返回错误
如果是 TCP 套接字,那么调用 connect 函数将激发 TCP 的三次握手过程,而且仅在连接建立成功或出错时才返回.其中出错返回可能有以下几种情况: 三次握手无法建立,客户端发出的 SYN 包没 ...
- 小米手机MIUI安装APK时自动获取安装权限(自动点击权限框)
这篇主要是记录一下在完全没学过Android的情况下硬拗完的这个APK,拖了很久查了很多资料才勉强写完,比较垃圾但还是实现功能了.记录的过程我也尽量把知识点贴出来. 一开始是看了一个大佬的分享贴( ...
- js实现网页自动跳转到手机页面
网站既包含PC端页面,又包括手机端页面时,打开手机端自动跳转手机页面,js代码如下 <script type="text/javascript"> var mobile ...
- 计蒜客(Stone Game)01背包
题意:在集合中挑一些数,形成一个集合S,剩下的数形成另一个集合P,使得S>= P ,并且对于S中任意元素ai,S-ai<=P 问有多少种方案. 题目链接:https://nanti.jis ...
- shell_Day01
1.判断/etc/inittab文件是否大于100行,如果大于,则显示"/etc/inittab is a big file."否者显示"/etc/inittab is ...
- web自动化测试python+selenium----API
import time from selenium import webdriver # 启动谷歌浏览器,开启与浏览器之间的会话 driver = webdriver.Chrome() # 访问一个网 ...
- Git 提交(commit)没有自动生成Change-Id导致无法push
1). 检查仓储 .git/hook 下面是否有 commit-msg 文件,如果没有可以到下面的地址下载,或者把其他同事的commit-msg文件拷贝到你的.git/hook重新commit即可. ...
- 获取指定字符串第n次出现的位置索引
returnIndex(str,cha,num){ var x=str.indexOf(cha); for(var i=0;i<num;i++){ x=str.indexOf(cha,x+1); ...
- webpack devserver proxy 配置以及react多页面
github地址: https://github.com/yangstar/React-antd-webpack-dev-server var webpack = require('webpack') ...