链接错误 Xcode libx264.a ARM

Posted

技术标签:

【中文标题】链接错误 Xcode libx264.a ARM【英文标题】:link error Xcode libx264.a ARM 【发布时间】:2013-11-19 17:20:47 【问题描述】:

我正在尝试构建 libx264.a 以在我的 iphone 4s(运行 ios 6.1.3)上运行

我正在使用 MACOSX 10.9 终端应用程序构建它:

CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang ./configure 
--host=arm-apple-darwin 
--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk 
--prefix=armv7 
--extra-cflags='-no-integrated-as -arch armv7' 
--extra-ldflags="-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system -arch armv7" 
--enable-pic --enable-static

这给了我输出:

platform:      ARM
system:        MACOSX
cli:           yes
libx264:       internal
shared:        no
static:        yes
asm:           yes
interlaced:    yes
avs:           avxsynth
lavf:          no
ffms:          no
mp4:           no
gpl:           yes
thread:        posix
opencl:        yes
filters:       crop select_every 
debug:         no
gprof:         no
strip:         no
PIC:           yes
bit depth:     8
chroma format: all

然后我运行“make”,它会生成一个 libx264.a 存档。

到目前为止,一切都很好。

在我设置的 Xcode(版本 5.0.2 (5A3005))应用程序上:

1) 构建设置 -> 标头搜索路径 -> x264 父目录 (../x264 ) 2) 构建阶段 -> 使用二进制文件链接库 -> 添加其他... ( ../x264/libx264.a ) 3)构建设置->其他链接器标志:-ObjC

在我的 AppDelegate.mm 中:

#import "AppDelegate.h"
#import "x264.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    
    x264_param_t x264param;
    x264_param_default(&x264param);

    // Override point for customization after application launch.
    return YES;


...

当我尝试在设备上运行它时出现错误:

Undefined symbols for architecture armv7:
  "x264_param_default(x264_param_t*)", referenced from:
  -[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 
(use -v to see invocation)

这里是 xcode 调用的命令:

Ld /Users/danieldantas/Library/Developer/Xcode/DerivedData/testingCpp-bvawshyhjcybwvadwwwjqxuomjts/Build/Products/Debug-iphoneos/testingCpp.app/testingCpp normal armv7
cd /Users/danieldantas/Desktop/projects/testingCpp
setenv IPHONEOS_DEPLOYMENT_TARGET 6.0
setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch armv7 -isysroot 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk 
-L/Users/danieldantas/Library/Developer/Xcode/DerivedData/testingCpp-bvawshyhjcybwvadwwwjqxuomjts/Build/Products/Debug-iphoneos 
-L/Users/danieldantas/Desktop/projects/testingCpp -L/Users/danieldantas/Desktop/projects/x264 
-F/Users/danieldantas/Library/Developer/Xcode/DerivedData/testingCpp-bvawshyhjcybwvadwwwjqxuomjts/Build/Products/Debug-iphoneos 
-filelist /Users/danieldantas/Library/Developer/Xcode/DerivedData/testingCpp-bvawshyhjcybwvadwwwjqxuomjts/Build/Intermediates/testingCpp.build/Debug-iphoneos/testingCpp.build/Objects-normal/armv7/testingCpp.LinkFileList 
-dead_strip -ObjC -stdlib=libc++ -fobjc-arc -fobjc-link-runtime -miphoneos-version-min=6.0 -lx264 -framework CoreGraphics -framework UIKit -framework Foundation -Xlinker -dependency_info -Xlinker 
/Users/danieldantas/Library/Developer/Xcode/DerivedData/testingCpp-bvawshyhjcybwvadwwwjqxuomjts/Build/Intermediates/testingCpp.build/Debug-iphoneos/testingCpp.build/Objects-normal/armv7/testingCpp_dependency_info.dat -o 
/Users/danieldantas/Library/Developer/Xcode/DerivedData/testingCpp-bvawshyhjcybwvadwwwjqxuomjts/Build/Products/Debug-iphoneos/testingCpp.app/testingCpp

知道如何解决这个问题吗?

谢谢

【问题讨论】:

你能在创建的库上运行lipo -info吗?它似乎没有为 ARMv7 编译。 lipo -info libx264.a 输入文件 libx264.a 不是胖文件 非胖文件:libx264.a 是架构:armv7 如果你运行nm library | grep param_default,它会出现吗?您的配置完全有可能不允许使用该功能。 nm libx264.a | grep x264_param_default 00000000 T _x264_param_default 000002c0 T _x264_param_default_preset 【参考方案1】:

刚刚找到解决办法:

问题在于 import 语句周围缺少 extern "C"

固定版本:

#import "AppDelegate.h"
extern "C" 
    #import "x264.h"


@implementation AppDelegate

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
        
    x264_param_t x264param;
    x264_param_default(&x264param);

    // Override point for customization after application launch.
    return YES;

【讨论】:

以上是关于链接错误 Xcode libx264.a ARM的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Android 应用配置第三方 so 动态库 ( /data/app/comxxx==/base.apk/lib/arm64-v8a]couldn‘t find “libx.so“ )(代码片

如何解决“错误:找不到 libx264”?

pjsip链接错误Xcode 5

Xcode Swift文件是为arm64构建的,它不是被链接的架构(armv7)

如何在 Xcode 中链接 fftw3? (苹果电脑)

Xcode 8.0 更新后架构 arm64 的重复符号