【发布时间】:2019-12-19 13:48:05
【问题描述】:
我正在使用 theos 将第三个框架链接到我的测试调整中,它只做一个日志,似乎在链接框架之后,tweak.dylib 根本没有加载到应用程序中。如果我在 makefile 中注释掉框架,则调整效果很好。任何想法?谢谢
makefile 关于框架很简单:
ARCHS = arm64
include $(THEOS)/makefiles/common.mk
ADDITIONAL_OBJCFLAGS = -fobjc-arc
TWEAK_NAME = WebServerTest
WebServerTest_FILES = Tweak.xm
WebServerTest_CFLAGS += -F./Frameworks
WebServerTest_LDFLAGS += -F./Frameworks -framework GCDWebServers
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
tweak.xm 非常简单:
%ctor {
NSLog(@"Staring up tweak...");
%init();
}
所以如果我在上面注释掉
WebServerTest_CFLAGS += -F./Frameworks
WebServerTest_LDFLAGS += -F./Frameworks -framework GCDWebServers
调整工作正常:
Aug 13 10:06:20 iOS-Dev SpringBoard(WebServerTest.dylib)[10378] <Notice>: Staring up tweak...
但是,如果我开始链接框架,则根本不会加载 WebServerTest.dylib
我在 lldb cmd image list 中手动检查了一个测试应用程序,它显示 WebServerTest.dylib 根本没有加载
有什么想法吗?或者我如何开始调试出了什么问题?因为我不确定可能的原因在哪里。
环境:iOS 12.0,unc0ver 3.1.0
otool -l WebServerTest.dylib | fgrep -A5 LC_LOAD_DYLIB
表演
--
cmd LC_LOAD_DYLIB
cmdsize 72
name @rpath/GCDWebServers.framework/GCDWebServers (offset 24)
time stamp 2 Thu Jan 1 08:00:02 1970
current version 1.0.0
compatibility version 1.0.0
--
所以看起来使用@rpath,我可以理解,但是我可以将框架嵌入到tweak.dylib中,以便可以自动加载吗?
【问题讨论】:
-
听起来像是框架加载问题。你能发布
otool -l WebServerTest.dylib | fgrep -A5 LC_LOAD_DYLIB的输出吗? -
是的,可能是链接器找不到 GCDWebServers 框架。 WebServerTest.dylib 中 GCDWebServers 的 LC_LOAD_DYLIB 命令将显示链接器正在查看的路径。
-
@Siguza 老朋友你在堆栈溢出?!伟大的。我已经发布了关于框架的 otool 输出,它使用的是 rpath。那么在这种情况下,我该如何将框架捆绑到 Tweak dylib 中?
-
@creker 在问题中发表,谢谢
-
所以似乎使用@rpath,我可以理解,但是我可以将框架嵌入到tweak.dylib中,以便它可以自动加载吗?请给出答案,以便我可以接受给予学分