Ios 链接第三方框架时,theos tweak不会加载到应用程序中

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

我正在使用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\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)来嵌入,对吗?‭‮‬Y‭‮‬E‭‮‬s‭‮‬.‭‮‬确认
WebServerTest\u LDFLAGS+=-rpath@loader\u path/
正在工作,将框架复制到@loader\u path/后,调整加载!看来加载失败会导致tweak完全不加载。我怎么能让theos将框架嵌入tweak动态库?这不会以任何合理的方式工作。动态库不是文件夹,编译的框架也不再是静态链接的对象。啊,我明白了。所以如果我能得到源代码,要么构建一个静态库(xxx.a)来嵌入,对吗?‭‮‬Y‭‮‬E‭‮‬s‭‮‬.‭‮‬确认
WebServerTest\u LDFLAGS+=-rpath@loader\u path/
正在工作,将框架复制到@loader\u path/后,调整加载!看起来加载失败将导致tweak完全不加载。