如何正确加载第三方库?

1.我将SocketRocket.framework和MQTTFramework.framework 放到了/opt/theos/lib 下
2.我在项目里TestTweak_EXTRA_FRAMEWORKS = SocketRocket MQTTFramework
3.查看dylib信息
.otool -L /Users/xujialiang042/Desktop/testwechat/.theos/obj/debug/TestTweak.dylib /Users/xujialiang042/Desktop/testwechat/.theos/obj/debug/TestWeChat.dylib: /Library/MobileSubstrate/DynamicLibraries/TestWeChat.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.13.0) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.22.0) /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.6.21) /System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.11.0) @rpath/SocketRocket.framework/SocketRocket (compatibility version 1.0.0, current version 1.0.0) @rpath/MQTTFramework.framework/MQTTFramework (compatibility version 1.0.0, current version 1.0.0) /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)

4.运行微信时,日志显示library not loaded @rpath/SocketRocket.framework/SocketRocket …

请教下,该如何正确加载第三方库?

你这是动态裤的话你安装的时候也得带上啊……

安装的时候 怎么带上?我应该怎么把这两个framework带上?谢谢~~~~~ 我找了一圈没找到~~TAT

您的意思是我要手动打ipa包吗? 我现在是直接调试的,没打ipa包,该怎么配置才能带上第三方库?

最好还是静态链接。

好吧。。。实在不行。。。我就直接丢代码进去编译了。。。。

是要把这2个framework 拖到 *.app的目录下?

取决于install name

但是总的来说我以一个六年越狱开发者的身份。
我的一点微不足道的意见就是越狱开发尽可能的使用静态链接

:_1:
有时候可能会不得不加载动态库
举个:chestnut:
如果想加载某些由gomobile 编译的go代码的时候。:grimacing:

哈哈哈 谢谢各位最后 我偷懒了下,把自己要用的消息队列相关的,封装好后 都打进静态库中,然后在Tweak中调用,方便多了~~~ 慢点看看动态库怎么玩O(∩_∩)O哈哈~

不因为这事他背后的逻辑是这样的。你动态链接,你dylib放哪呢?沙盒内每次更新都要重新复制过去一次,deb的安装脚本也很麻烦,

你要是放沙盒外,要是其他的开发者也在deb里在同样位置放了个文件,你用户安装就会看到apt报错。所以你得把这个库单独打个deb依赖传到Cydia,大家都用同一个依赖才会避免这个问题

更不要说动态链接在软件工程里的缺点之一就是问题要到运行时才能发现。

对你说的有道理,我表示赞同。 不到万不得已不应该使用动态库。

我集成了 Carthage,然后使用 Shell Scripts 配置动态库,具体如下(带有个人偏好):

初始化 Carthage (与当前问题无关),然后安装第三方 Frameworks 至 Theos/lib 目录:

carthage update --platform iOS --use-submodules --no-use-binaries && cp -rf ./Carthage/Build/iOS/*.framework $THEOS/lib/

自定义 Makefile 文件(以 SpringBoard 为例):

RPATH = /System/Library/CoreServices/SpringBoard.app/Frameworks/

INSTANCE_LDFLAGS = -rpath $(RPATH)

before-stage::
	$(ECHO_NOTHING)mkdir -p $(THEOS_STAGING_DIR)$(RPATH)$(ECHO_END)
	$(ECHO_NOTHING)rsync -a ./Carthage/Build/iOS/*.framework $(THEOS_STAGING_DIR)$(RPATH) $(FW_RSYNC_EXCLUDES)$(ECHO_END)

Dyld Error Message:
Library not loaded: @rpath/SocketRocket.framework/SocketRocket
Referenced from: /private/var/mobile/Containers/Bundle/Application/DC6C71C8-66B5-43E5-950A-0BAAFC258A8C/WeChat.app/See.dylib
Reason: image not found
Dyld Version: 353.12
我也是socket这个库 不能加载 你是怎么解决的呢