在Linux下编译生成动态库*.so后发现用dlopen打开时出错解决办法

在Linux下有时候编译的源文件可能有语法错误,但是很多时候还是能生成动态库,这个时候,用dlopen打开时就没有办法返回句柄,导致能生成动态库,却无法打开,这个时候最好的办法是不用dlopen动态调用的方法,而是使用静态调用的方法。

1、在测试文件中加上静态调用需要的头文件,同时将此头文件放在与测试文件同一个目录下,以便测试文件能够找到该头文件

2、将生成的库定位输出到/usr/lib(如果是64位系统,则是在/usr/lib64)文件夹中

3、编译时参考我的代码, gcc main.c -L. -lisucard -o main(main.c是测试代码,生成的库名字叫libisucaed.so)

4、这个时候如果库有问题,编译测试文件的时候就会报错,这个时候根据报错的地方修改就可以了,这样就能定位到哪里有问题。当把错误修改完成后,就能得到你要的东西了。

时间: 2025-01-16 20:28:49

在Linux下编译生成动态库*.so后发现用dlopen打开时出错解决办法的相关文章

Linux下的动态库与静态库

2019-09-25 关键字:生成库.静态库引用.动态库引用 在 C 开发中,“库”是一个经常听到的名词. 所谓的库其实就是一个二进制文件.这个二进制文件的内容是可被其它C程序调用执行的函数.换句话说,库就是一组C代码的打包形式而已,打包是指将源代码以库的形式编译而生成的文件. 不过即使它只是源代码的打包,它也仍然是有系统专有性的,即不同系统下编译出来的库并不能互相兼容使用. C库可分为动态库与静态库两种.引用了外部库的应用程序在编译时会在”链接期“处理库与程序源码之间的关系. 1.静态库 静态

linux下so动态库一些不为人知的秘密

linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识.    基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/ls linux-vdso.so.1 => (0x00007fff597ff000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00000036c2e00000) librt.so.1 => /

linux下so动态库一些不为人知的秘密(转)

linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识.基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/ls 使用 ldd -u /bin/ls 查看不需要链接的so 大家知不知道linux从程序(program或对象)变成进程(process或进程),要经过哪些步骤呢,这里如果详细的说,估计要另开一篇文章.简单的说分三步:    1.fork进程,在内核创建

linux 下的动态库制作 以及在python 中如何调用 c 函数库

动态库: 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数.函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译.链接并与使用它们的进程分开存储的函数.DLL 还有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.Wind

linux下的动态库

也就是windows下的.dll 1.命名 2.制作 (1)生成与位置无关的.o文件 gcc -fPIC -c *.c -I ../include (2)将.o打包成动态库(或者叫共享库) gcc -shared -o libmytest.so *.o -I ../include 3.发布和使用 (1)gcc main.c lib/libmytest.so -o app -I include (2)gcc main.c -L ./lib -l mytest -o app 4.如何解决动态库无法加

Linux下U盘内容为只读文件不能存储其他内容的解决办法

不知道什么情况最近u盘出现问题了,打开u盘后所有的文件上面都有了个上锁的标志,刚开始没太在意,然后想要继续在u盘中存东西时才发现根本存不进去,百度之后才知道是此时u盘内容都是只读文件,那要怎么解决这个问题呢?看了好多人的描述之后,有人说换u盘吧,有的说是格式化u盘,可是u盘中的文件很多,这样子的话总是感觉有点不妥,不过在我的坚持下终于发现了一个好办法来解决此问题. 将u盘插入Linux系统下,直接挂载了.然而u盘内文件都是只读文件,修改权限也不能改. 解决方法如下: (1).在插入u盘之前,先执

用Vs2013+VELT进行Linux开发:动态库

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 本文适用于vs2013 + Visual EmbedLinux Tools 0.1.1 1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行ubo

用VS2013+VELT-0.1.3进行Linux开发:动态库

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.3 1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序

Linux下的动态连接库及其实现机制

Linux与Windows的动态连接库概念相似,但是实现机制不同.它引入了GOT表和PLT表的概念,综合使用了多种重定位项,实现了"浮动代码",达到了更好的共享性能.本文对这些技术逐一进行了详细讨论. 本文着重讨论x86体系结构,这是因为 (1)运行Linux的各种体系结构中,以x86最为普及: (2)该体系结构上的Windows操作系统广为人知,由此可以较容易的理解Linux的类似概念: 下表列出了Windows与Linux的近义词,文中将不加以区分: Windows Linux 动