当前位置:首页 » 编程软件 » dll编译成so

dll编译成so

发布时间: 2022-07-27 11:54:03

① 制作DLL的源文件能不能编译成.SO文件

纯C写的话,移植到linux应该是很容易的

顺利的话直接在linux下编译就行了,不顺利的话,需要把windos下的函数替换成对应的linux下的,或者自己再封装一层

② 什么是SO文件

so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据。

③ 如何给dll库 添加.mk文件 ndk编译为.so

给dll库 添加.mk文件 ndk编译为.so不清楚

④ 怎样把.c文件编译成.so文件

比如有一个test.c文件,我想打包成动态库test.so,
直接gcc
test.c
-o
test.o
-fpic
gcc
-o
test.so
test.o
-shared
使用的时候发布.so和头文件即可。
链接的时候要记得丢在默认目录或者将其所在目录声明到环境变量,不然有时候会提示找不到这个库文件。

⑤ linux中把.c的文件编译成.so

首先
gcc
-c
-fPIC
libst.c
生成
libst.o
然后
gcc
-shared
-fPIC
-o
libst.so
libst.o
生成
libst.so
动态链接库
把libst.so拷贝到系统默认库目录下,比如
/lib,
/usr/lib

假定你有
test.c
要引用这个库
gcc
-lst
-o
test
test.c
然后就可以了
假如不能把libst.so拷贝到默认库目录下,比方说放在了
/home/aaa/lib

那么就用这样的语句来编译test.c
gcc
-L/home/aaa/lib
-lst
-Wl,-rpath=/home/aaa/lib
-o
test
test.c

⑥ 有关跨平台模块化编程,DLL,SO文件等问题,知多知少欢迎进来~

1.确实没什么标准可言,dll主要就是提供代码动态加载。所以它只需要让加载器能够找到正确的函数名就行了。保证链接过程不出错即可。大型API要遵循一些原则,是因为函数提供给其他人应用,而且是二进制格式发布。就算是自己的dll文档对函数的解释也要写清楚。以后维护升级保证dll内原始的函数原形不发生变化。没有什么模式需要你遵循。dll的内容也只是函数的集合而已。
2.dll分几种,其实只是可执行文件格式而已。so文件也是一种可执行格式(ELF格式)。计算机发展到现在可执行文件格式有多种变体。链接器和加载器.pdf 一书对可执行文件讲的比较详细,你肯定不是编译器和连接器的开发者。所以你不需要知道这么多。只需要知道可执行文件存放着我需要的代码,连接器把不同的库连接到一起,然后main函数就可以在执行过程中动态调用它们。推荐看:深入剖析Win32可移植可执行文件格式 链接器和加载器 两份资料
你去搜搜可执行文件格式,可以找到一些文章。
3.其实不许要注意什么,so性质和dll是一样的(存放着可执行代码,链接需要的信息,符号表等等。)。它们只是在不同平台下的动态链接库而已。对于dll到so注意什么???对于普通程序员没什么要注意的。我们只需要写出代码然后,使用连接器和编译器就可以了。细节问题是编译器和连接器加载器的实现者关心的。
4.COM即是一种可执行格式(dos时代),也是一种 “组件对象模型”。前者已经不主流了,后者不过时。com也是dll这些dll按照com规范提供固定名称的函数(俗称“接口”)。需要加载这些com的主程序,也遵循com规范调用这些函数。这样两边就能协同工作。

⑦ 如何在windows环境下将.so编译成.dll如果不行,在linux下的具体编译过程是怎样的望高手回答。。谢!

.so文件就已经是经过编译的C程序

而.dll文件是编译好的动态链接库文件,需要用rundll32.exe来执行,或者载入shell执行。

所以.so和.dll不能互换。

在linux下面直接用gcc编译器就能编译。

命令格式:

gcc 文件名 C源码文件名

例:

gcc 123.so 123.c

===========================================
.dll的就是已经编译成功的了,不能再被编译。
就像生孩子,已经是女孩了,你还能捅回去再换
个男孩出来?
===========================================

⑧ C++怎么加载已经写成.so(.dll)的类

1.静态调用dll
在新文件yyy.cpp里加入如下内容;
#include "xxx.h"
#pragma comment(lib,"xxx.dll")
生成的dll不需要def文件和cpp文件也可以
不包含xxx.h的话,需要把h文件内的函数原型声明添加进yyy.cpp
编译时需要加入dll,类似这样:
g++ -L. -o yyy.exe yyy.cpp xxx.dll
2.动态调用dll
首先,你需要包含windows.h
#include <windows.h>
你还需要一个句柄保存装入的dll文件
HINSTANCE hDll=LoadLibrary("xxx.dll");
声明所需函数的对应函数指针类型
typedef void (*pfunc)(void);
获得指向函数的函数指针
pfunc pf=(pfunc*)GetProcAddress(hDll,"example");
使用完毕后,要释放dll文件
FreeLibrary(hDll);
3.如果是so文件的话也是同样的道理,可以在工程属性里面添加好库的路径,或者编译的时候指明库。然后再在cpp中include相应的头文件:
如Linux下调用库opencv_core.so
g++ main.cpp -o test -L usr/lib/ -lopencv_core

只要路径和命名空间都写对了,就可以使用类名关键字来实例化类了。
myobj m;
m.func( );

⑨ 如何将lib文件转换成so文件

你试下用解压软件打开,把软件直接拖进去。有些软件直接拖进去开机运行不了(像输入法),需要提取软件的lib下的.so文件(同样用解压软件打开提取)放到ROM的system/lib目录下。

热点内容
值班发布源码 发布:2024-10-25 19:23:50 浏览:369
php实现注册登陆 发布:2024-10-25 19:22:56 浏览:545
android开发库 发布:2024-10-25 18:50:28 浏览:231
优酷路由宝存储 发布:2024-10-25 18:41:37 浏览:934
pythoncmdb 发布:2024-10-25 18:41:29 浏览:200
安卓触控屏不灵怎么办 发布:2024-10-25 17:31:22 浏览:872
中信银行信用卡激活后密码是多少 发布:2024-10-25 17:28:31 浏览:506
cocos2d30编译 发布:2024-10-25 17:20:51 浏览:994
app直播平台源码 发布:2024-10-25 17:19:57 浏览:224
asp文件上传带进度条 发布:2024-10-25 17:19:54 浏览:658