Ios 链接第三方框架时,theos tweak不会加载到应用程序中
我正在使用theos将第三个框架链接到我的测试调整中,它除了一个日志之外什么都不做,而且在链接框架之后,tweak.dylib似乎根本没有加载到应用程序中。如果我在makefile中注释掉框架,那么这个调整效果很好。有什么想法吗?谢谢 makefile对于框架很简单:Ios 链接第三方框架时,theos tweak不会加载到应用程序中,ios,jailbreak,theos,Ios,Jailbreak,Theos,我正在使用theos将第三个框架链接到我的测试调整中,它除了一个日志之外什么都不做,而且在链接框架之后,tweak.dylib似乎根本没有加载到应用程序中。如果我在makefile中注释掉框架,那么这个调整效果很好。有什么想法吗?谢谢 makefile对于框架很简单: ARCHS = arm64 include $(THEOS)/makefiles/common.mk ADDITIONAL_OBJCFLAGS = -fobjc-arc TWEAK_NAME = WebServerTest
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\u CFLAGS+=-F./框架
WebServerTest\u LDFLAGS+=-F./Frameworks-framework GCDWebServers
调整工作正常:
Aug 13 10:06:20 iOS-Dev SpringBoard(WebServerTest.dylib)[10378] <Notice>: Staring up tweak...
因此,我可以理解,它似乎使用@rpath,但是我可以将框架嵌入tweak.dylib中,这样它就可以自动加载吗?无论你放在哪里
GCDWebServers。dyld找不到框架。有几种方法可以解决这个问题
您可以修补GCDWebServers
的LC\u ID\u DYLIB
命令以包含绝对路径-您可能希望看到maninstall\u name\u tool
或者您可以将一些-rpath
标志添加到LDFLAGS
中。具体来说,如果您的GCDWebServers
位于/mypath/GCDWebServers.framework/GCDWebServers
中,您应该添加:
-rpath /mypath/
或者,如果您想在动态库旁边有GCDWebServers.framework
,无论绝对路径如何,您都应该能够使用:
-rpath @loader_path/
有关更多信息,请参见man-dyld
和man-ld
放置在GCDWebServers的任何位置。dyld找不到框架。有几种方法可以解决这个问题
您可以修补GCDWebServers
的LC\u ID\u DYLIB
命令以包含绝对路径-您可能希望看到maninstall\u name\u tool
或者您可以将一些-rpath
标志添加到LDFLAGS
中。具体来说,如果您的GCDWebServers
位于/mypath/GCDWebServers.framework/GCDWebServers
中,您应该添加:
-rpath /mypath/
或者,如果您想在动态库旁边有GCDWebServers.framework
,无论绝对路径如何,您都应该能够使用:
-rpath @loader_path/
有关更多信息,请参见mandyld
和manld
听起来像是框架加载问题。你能发布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中,这样它就可以自动加载吗?请给出答案,这样我就可以接受像框架加载问题一样给出信用额度。你能发布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中,这样它就可以自动加载吗?请给出答案,这样我可以接受给creditshow我可以让theos将框架嵌入到tweak动态库中吗?这不会以任何合理的方式工作。动态库不是文件夹,编译的框架也不再是静态链接的对象。啊,我明白了。所以如果我能得到源代码,要么构建一个静态库(xxx.a)来嵌入,对吗?YEs.确认WebServerTest\u LDFLAGS+=-rpath@loader\u path/
正在工作,将框架复制到@loader\u path/后,调整加载!看来加载失败会导致tweak完全不加载。我怎么能让theos将框架嵌入tweak动态库?这不会以任何合理的方式工作。动态库不是文件夹,编译的框架也不再是静态链接的对象。啊,我明白了。所以如果我能得到源代码,要么构建一个静态库(xxx.a)来嵌入,对吗?YEs.确认WebServerTest\u LDFLAGS+=-rpath@loader\u path/
正在工作,将框架复制到@loader\u path/后,调整加载!看起来加载失败将导致tweak完全不加载。