分离静态库架构

先来看一段 MakeFile 脚本:

OUT = libkugouplayer_VIPER3DRender.a

OBJS =       \
        ../../Limiter.cpp \
        ../../ViPER3DEffect.cpp \
        ../../../AudioEffect.cpp


INCLUDE = -I../../../ \
          -I../../../../utils \
          -I../../../../include \
          -I../../../../resampler \
          -I../../../surround \
          -I../../../../thirdpartylibrary/ffmpeg/build/master/arm/include/ \

LIB = ../libViPER3D.a 

CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
SDK_VERSION=10.12
SDKPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SDK_VERSION}.sdk 


$(OUT) : $(OBJS)
    CC -c $(OBJS) -arch x86_64 -isysroot $(SDKPATH) $(INCLUDE)
    ar rc $(OUT) *.o $(LIB)
clean:
    rm -f *.o $(OUT)

在做组件化的过程中,为了给 Mac 版的酷狗音乐也提供音效组件,在打包依赖到libViPER3D.a 这个包含全架构(i386 armv7 x86_64 arm64)的组件库的时候遇到了如下的错误:

2 warnings generated.
ar rc libkugouplayer_VIPER3DRender.a *.o ../libViPER3D.a 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive member: libkugouplayer_VIPER3DRender.a(libViPER3D.a) fat file for cputype (7) cpusubtype (3) is not an object file (bad magic number)
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar: internal ranlib command failed
make: *** [libkugouplayer_VIPER3DRender.a] Error 1

错误里面提示到了libViPER3D.a 是一个 fat file ,估计是跟这个有关。用 lipo 查看了一下libVipER3D.a 的架构

lipo -info libViPER3D.a 
Architectures in the fat file: libViPER3D.a are: i386 armv7 x86_64 arm64

确实是一个 fat file ,那么就单独分离出一个 x86_64 的架构出来试试。

lipo libViPER3D.a -thin x86_64 -output libViPER3D_x86_64.a

然后再重新打包了一下发现就可以了。BINGO!

另外记录一下遇到的另外一个问题,在打包包含有静态库的库时,不要这样写

LIB = -L../ -llibViPER3D.a 

,这样写是不会把它打包进去的;而且不要把$(LIB) 这个放在编译CC 那行,而要放在打包ar 的时候再把它打进去,直接写路径就好了,这样

LIB = ../libViPER3D.a

要不然老是会报找不到路径,挺奇怪的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值