当前位置: 首页 新闻详细

将dll文件改为exe文件为什么不能运行,如何将动态链接库 .dylib 转换为 .framework

专业编程培训机构——完成蜕变以后轻松拿高薪

电话+V:159999-78052 ,欢迎咨询动态链接库编译到exe里,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]

一、将dll文件改为exe文件为什么不能运行

简单说:dll是动态链接库(是被exe调用的)dll不是可独立运行的文件,

打比方:dll是一个仓库,exe是仓库的门。exe可以打开仓库的门。但是dll即使把自己变成仓库门也是没有任何意义的。被编译好的链接库与程序随便改变后戳是不可以的。

最简单的例子:你把TXT改为EXE,他会显示TXT里面的文字吗?很确定,不会的。

复杂一些讲:

dll俗称:动态链接库:是一个包含可由多个程序同时使用的代码和数据的库。可以被事先设定好得exe文件调用。

所谓动态链接库(Dynamic-LinkLibraries,简称DLLs),简单地说就是一个可执行模块,其扩展名为.DLL,模块中包含了可以被其他应用程序或其他DLLs使用的例程和资源。跟一般的的可执行程序扩展名为.EXE不同的是,DLLs没有通常的主程序,但它有多个执行入口。

DLLs的特点在于它的代码是在运行期动态地链接到调用它的程序中的,DLLs一旦加载,就能被多个应用程序或其它DLLs共享。

exe(可执行程序),一种可在操作系统存储空间中浮动定位的可执行程序。MS-DOS和MS-WINDOWS下,此类文件扩展名为.exe2.WINDOWS操作系统中的二进制可执行文件,可执行文件分两种一种是后辍名为.COM另一种就是.EXE。

二、把软件放在桌面上提示“请把node.dll放到exe目录下”怎么办?

可以把把软件所在的整个目录复制到桌面上。动态链接库和EXE文件放在同一目录会加快程序的运行速度,如果不放在一个目录就要在EXE等可执行文件的内核代码增加转向指令。当程序使用DLL时,具有以下的优点:使用较少的资源,当多个程序使用同一个函数库时。

DLL可以减少在磁盘和物理内存中加载的代码的重复量。这不仅可以大大影响在前台运行的程序,而且可以大大影响其他在Windows操作系统上运行的程序。推广模块式体系结构DLL有助于促进模块式程序的开发。这可以帮助您开发要求提供多个语言版本的大型程序或要求具有模块式体系结构的程序。



相关信息

当某个程序或DLL使用其他DLL中的DLL函数时,就会创建依赖项。因此,该程序就不再是独立的,并且如果该依赖项被损坏,该程序就可能遇到问题。例如,如果发生下列操作之一,则该程序可能无法运行:依赖DLL升级到新版本。

 修复了依赖DLL。依赖DLL被其早期版本覆盖。从计算机中删除了依赖DLL。这些操作通常称为DLL冲突。如果没有强制实现向后兼容性,则该程序可能无法成功运行。对于旧程序,请使用空.local文件。每个方法都告诉操作系统使用位于程序根文件夹中的专用DLL。

如何将动态链接库.dylib转换为.framework

首发2024-08-1722:47·??生如果你开发的iOS应用中使用了自己开发或第三方的动态链接库.dylib,在程序打包时需要将该库嵌入到程序包的Frameworks目录中,以便程序运行时可以载入这个库来使用。当你想发布该应用并上传到AppleConnect审核时,会出现InvalidBinary错误,具体的错误信息为:

ITMS-90426:InvalidSwiftSupport-TheSwiftSupportfolderismissing.Rebuildyourappusingthecurrentpublic(GM)versionofXcodeandresubmitit.

意思是你的应用包中缺失了SwiftSupport目录。其实这个信息并不准确,我就在网上查找如何补上这个所谓的SwiftSupport目录,弄了好久才明白,原来是应用中使用了一个第三方的动态链接库.dylib,这个库需要在发布时嵌入到应用程序包里的Frameworks目录中,错误由此而生,看看Apple文档时如何说的:

"Dynamiclibrariesoutsideofaframeworkbundle,whichtypicallyhavethefileextension.dylib,arenotsupportedoniOS,watchOS,ortvOS,exceptforthesystemSwiftlibrariesprovidedbyXcode."

意思是iOS等平台不允许在Frameworks目录内放置.dylib库(之前是可以的)。要解决这个问题,需要把第三方的.dylib转换为iOS平台的.framework库。

以下以
libonnxruntime-genai.dylib为例,将其转换为
libonnxruntime-genai.framework。

生成libonnxruntime-genai.dylib对应的二进制文件libonnxruntime-genai
转到macOS终端,进入libonnxruntime-genai.dylib所在目录,键入命令:
lipo-createlibonnxruntime-genai.dylib-outputlibonnxruntime-genai生成framework目录
iOS平台下的.framework库实际上是一个目录,其中包含了实际的库文件及相关信息,因此我们创建如下结构的目录:

生成framework目录内必要的文件
最基本的Info.plist文件内容:
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEplistPUBLIC"-//Apple//DTDPLIST1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plistversion="1.0">

<dict>

<key>BuildMachineOSBuild</key>

<string>23F79</string>

<key>CFBundleDevelopmentRegion</key>

<string>en</string>

<key>CFBundleExecutable</key>

<string>libonnxruntime-genai</string>

<key>CFBundleIdentifier</key>

<string>com.yourdomain.onnxruntime-genai</string>

<key>CFBundleInfoDictionaryVersion</key>

<string>6.0</string>

<key>CFBundleName</key>

<string>libonnxruntime-genai</string>

<key>CFBundlePackageType</key>

<string>FMWK</string>

<key>CFBundleShortVersionString</key>

<string>1.0.0</string>

<key>CFBundleSupportedPlatforms</key>

<array>

<string>iPhoneOS</string>

</array>

<key>CFBundleVersion</key>

<string>1</string>

<key>MinimumOSVersion</key>

<string>17.0</string>

<key>UIDeviceFamily</key>

<array>

<integer>1</integer>

<integer>2</integer>

</array>

</dict>

</plist>

module.modulemap文件内容:

frameworkmodulelibonnxruntime-genai{

umbrellaheader"onnxruntime_c_api.h"

export*

}

4.修改二进制文件内的@rpath

以上生成的framework库文件,如果这就拿来放到iOS项目中编译链接,是不会有语法错误的,但在运行时会出运行时错误:

error:dyld:Librarynotloaded:@rpath/libonnxruntime-genai.dylib

这是因为framework中的二进制文件libonnxruntime-genai内含有iOS程序运行时如何载入该库的路径:@
rpath/libonnxruntime-genai.dylib,这显然是有问题的。动态库内的@rpath等信息可以用以下命令查看:

otool-llibonnxruntime-genai

把它修改成正确的路径,转到
libonnxruntime-genai.framework目录:

install_name_tool-id@rpath/libonnxruntime-genai.framework/libonnxruntime-genailibonnxruntime-genai

将修改后的
libonnxruntime-genai.framework文件导入Xcode你的iOS项目中使用即可。

【WINDRISES EMPLOYMENT PROGRAMMING】尊享对接老板

电话+V:159999-78052

机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。

动态链接库编译到exe里
发布人:tashuangei9010 发布时间:2024-09-21