macOS下加载动态库dylib报"code signature invalid"错误的解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了macOS下加载动态库dylib报"code signature invalid"错误的解决办法相关的知识,希望对你有一定的参考价值。

一、现象描述

      在macOS上搞开发也有一段时间了,也积攒了一定的经验。然而,今天在替换工程中的一个动态库时还是碰到了一个问题。原来工程中用的是一个静态库,调试时发现有问题就把它替换成了动态库。这本来没什么值得一说,可工程编译完后打包测试时发现,不论怎么搞程序都加载不起来。毫无疑问,这是新替换的动态库带来的问题。

二、解决办法

      于是尝试打开日志文件看看有什么发现吧:

      根据上面的日志文件提示,动态库加载的时候失败了。原因为:code signature invalid。这就奇了个怪了,以前都没碰到类似的问题啊。而且这个动态库还是从其他工程中拷贝过来的,从来没有发现问题啊。既然提示签名失效,那先使用命令看看签名状态再说:

      可以看到,libexpat.1.dylib这个文件的签名确实是失效了。可能是被修改了或者其他原因而导致的。而libexiv2.14.dylib这个文件则没有签名。既然动态库的代码签名是无效的,那么我们就有了一个大胆的想法,尝试给动态库重新签名好了:

      所有相关的依赖库都签好名,重新打包测试,问题果然消失了。不过,为啥在另外一个工程里面使用时完美运行,在这个工程里面时却报代码签名失效,这点倒是没有想通。

三、参考链接

1. https://forum.unity3d.com/threads/invalid-signature-for-submitted-mac-app.120263/

2. https://github.com/XVimProject/XVim/issues/971

3. https://knowledge.autodesk.com/search-result/caas/sfdcarticles/sfdcarticles/Code-signature-invalid-error-when-launching-product-on-OS-X.html

以上是关于macOS下加载动态库dylib报"code signature invalid"错误的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

MacOS下安装unicorn这个库失败

macOS 上的 .so 和 .dylib 有啥区别?

Python:MySQLdb 和“未加载库:libmysqlclient.16.dylib”

使用 flask_mysqldb 获取“未加载库:libssl.1.0.0.dylib”、“原因:找不到图像”

dyld:未加载库:/usr/local/lib/liblua.5.1.5.dylib

imagemagick 识别给出“dyld:未加载库:/usr/local/lib/libtiff.3.dylib”