Theos引用自己的dylib库的问题

需求:
初学theos,编写了简单的dylib,在配置好makefile后,一直有这样的编译错误,不知何故,在我理解这里(ZipData_LDFLAGS += -lzipframework)加载动态dylib,编译期间写什么都无所谓吧,最后都是在真机的lib库里找到,但是我这里却一直报错呢?

**日志:
**代码:
项目目录:
求解

zipframework这个是我自己写的。名字起的不好,其实不是framework,是一个.dylib

讲道理ZipData_LDFLAGS += -lzipframework这里难道不是指定真机运行时动态库的么,怎么mac编译会说找不到,本来也不应该在mac 不是吗?

要在本地也有的。。。。。。。

三个错。第一,库叫libzip.dylib的话-lzip就可以了
第二,ld的时候需要这个dylib在磁盘上或者-undefined dynamic_lookup
第三。如果在磁盘上的话,LDFLAGS里你要告诉ld到哪路去搜索

另外越狱开发我推荐大多数时候使用静态库

如果你的库在设备上的全局路径的话可以试试用machotbd 生成一个tbd给makefile使用(需要Xcode8以上的编译环境)

第一条那我自己创建的不以lib开头呢,比如就叫zipframework 呢?
也就说是我 我自己创建的dylib,是要/user/xx/xxx/xx/zipframework.dylib 写全部咯?

-L完整路径可以,但这会带来linker里的其他问题,完全不建议这么做

解决方案1:
LDFLAG加:
-LMac上存放libzipframework.dylib的路径 -lzipframework

解决方案2:
CFLAGS加:
-undefined dynamic_lookup

1 个赞

哦?这样,那真机上,也会到真机上的目录去找这个dylib嘛

依旧啊

额,我在我的zipframework.dylib改名叫libzipframework.dylib 放在lib目录里,能编译过了
下一个问题是,LDFLAGS这么写,手机的dylib放在哪?我ssh到/Library/MobileSubstrate/DynamicLibraries,找不到啊

根据zipframework里的一个数值决定的。加载路径在编译好的tool里。optool -l看下就知道加载路径了

感谢兄台一直耐心教导!
话说没看明白,
现在我把zipframework放在了theos项目 lib目录下,然后按照你的-L ./lib/ -lzipframework能编译过了,这样装到真机上,提示找不到zipframework.dylib,所以我就想问 这种写法 真机上dylib应该放在哪呢?

自己optool看加载路径啊……

终于搞定了,多谢哈
我optool -l以后 发现有个那么是 @rpath/zipframework.dylib的,然后真机上就会报错:dyld: Library not loaded: @rpath/zipframework.dylib
用install_name_tool 命令把这个字段改成手机的目录后 搞定。。
感谢提供思路!