[求助]越狱开发, Theos引用三方静态库的问题
发表于:
2017-5-16 10:24
4723
[求助]越狱开发, Theos引用三方静态库的问题
最近在捣腾将FFmpeg集成到ios程序上实现编解码一些功能,发现THEOS引用编译好的库出现了一些问题,具体问题是这样。 我已经把FFmpeg编译了armv7、arm64、x86等版本,使用lipo查看对应的.a文件也都能看到支持的架构,如下: Architectures in the fat file: FFmpeg-iOS/lib/libavcodec.a are: armv7 i386 x86_64 arm64 Architectures in the fat file: FFmpeg-iOS/lib/libavdevice.a are: armv7 i386 x86_64 arm64 Architectures in the fat file: FFmpeg-iOS/lib/libavfilter.a are: armv7 i386 x86_64 arm64 Architectures in the fat file: FFmpeg-iOS/lib/libavformat.a are: armv7 i386 x86_64 arm64 Architectures in the fat file: FFmpeg-iOS/lib/libavutil.a are: armv7 i386 x86_64 arm64 Architectures in the fat file: FFmpeg-iOS/lib/libswresample.a are: armv7 i386 x86_64 arm64 Architectures in the fat file: FFmpeg-iOS/lib/libswscale.a are: armv7 i386 x86_64 arm64
而且我将他们和头文件一起放入xcode设置好相应的引入可以在项目中正常使用,但是我当我尝试在theos里面进行集成时却出现了一些问题,我是这样做的: 1、将编译好的头文件放入THEOS的include目录下(因为头文件中间有些有包含关系,放入项目对应目录更改较为麻烦) 2、将.a文件放入THEOS的lib目录下 3、编写makefiles文件,文件如下:
makefiles ARCHS = arm64 TARGET = iphone:latest:8.0 #此句加入与否不影响编译结果 include $(THEOS)/makefiles/common.mk
TOOL_NAME = consoleapp consoleapp_FILES = main.mm consoleapp_FRAMEWORKS =UIKit AVFoundation CoreImage OpenGLES VideoToolbox CoreGraphics CoreMedia AudioToolbox consoleapp_PRIVATE_FRAMEWORK = IOSurface IOKit
consoleapp_LDFLAGS+=libs/libbz2.1.0.tbd consoleapp_LDFLAGS+=libs/libiconv.2.tbd consoleapp_LDFLAGS+=libs/libz.1.tbd consoleapp_LDFLAGS+=-lavcodec consoleapp_LDFLAGS+=-lavfilter consoleapp_LDFLAGS+=-lavformat consoleapp_LDFLAGS+=-lavutil consoleapp_LDFLAGS+=-lswresample consoleapp_LDFLAGS+=-lswscale consoleapp_LDFLAGS+=-lavdevice
include $(THEOS_MAKE_PATH)/tool.mk
当我进行编译时,编译链接阶段发生如下错误:
Making all for tool consoleapp… ==> Compiling main.mm (arm64)… ==> Linking tool consoleapp (arm64)… Undefined symbols for architecture arm64: "clock gettime", referenced from:av gettime_relative in libavutil.a(time.o)av gettime_relative_is_monotonic in libavutil.a(time.o) ld: symbol(s) not found for architecture arm64
搜索相关资料在linux下面加入librt即编译库加上-lrt即可,但是我在osx全路径下查找librt并没有相对应的库,问题的根本好像是苹果系列的系统在实现clock_gettime时有所出入(事实上我之前开过一贴是关于libevent引用出现同样的问题,当时不太清楚发帖的说明而被锁帖囧,libevent并不是我想要的必须使用的库,这个问题没解决也就绕过了),然而比较奇葩的是,我把它做为非越狱应用在xcode8上编译却能顺利通过并在arm64(iphone6)的机器上机器上跑起来,附上xcode的库依赖
请问坛子里有没有大神碰到过类似问题并且顺利解决,或者有其他解决思路呢?(我都想直接改FFmpeg的源码调用_clock_gettime的地方然后重新编译了,但是怕改动引起连锁反应暂时还没动手)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课