(我把这个问题发贴到了VideoLAN论坛,但是还没有接手,我知道这个社区不会让我失望.)

我正在为iOS构建MobileVLC项目.我已经通过命令行流程来构建项目,经过了http://forum.videolan.org/viewtopic.php?f=12&t=103331和http://forum.videolan.org/viewtopic.php?f=12&t=103271中描述的几个调整之后,构建脚本几乎完成了.当它尝试获取Xcode来构建最终项目时,它会出错.所以我加载到Xcode并尝试构建,我可以看到错误,这里是我使用-v链接器标志时得到的:

Ld /Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Products/Debug-iphoneos/VLC.app/VLC normal armv7
    cd /Users/bp/Desktop/vlc/MobileVLC
    setenv IPHONEOS_DEPLOYMENT_TARGET 5.1
    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/iPhoneOS5.1.sdk -L/Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Products/Debug-iphoneos -L/Users/bp/Desktop/vlc/MobileVLC/External/MobileVLCKit -L/Users/bp/Desktop/vlc/MobileVLC/External/MediaLibraryKit -F/Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Products/Debug-iphoneos -filelist /Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Intermediates/MobileVLC.build/Debug-iphoneos/MobileVLC.build/Objects-normal/armv7/VLC.LinkFileList -dead_strip -Wl,-no_pie,-v -fobjc-link-runtime -miphoneos-version-min=5.1 -framework Foundation -framework UIKit -framework CoreGraphics -framework OpenGLES -framework AudioToolBox -framework QuartzCore -liconv -lz /Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Products/Debug-iphoneos/libmobileMediaLibraryKit.a -lsqlite3 -lstdc++.6 -lbz2 -lxml2 -framework CoreData -framework CoreText -framework MediaPlayer /Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Products/Debug-iphoneos/libmobileVLCKit.a -o /Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Products/Debug-iphoneos/VLC.app/VLC

@(#)PROGRAM:ld  PROJECT:ld64-133.3
configured to support archs: armv6 armv7 i386 x86_64
Library search paths:
   /Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Products/Debug-iphoneos
   /Users/bp/Desktop/vlc/MobileVLC/External/MobileVLCKit
   /Users/bp/Desktop/vlc/MobileVLC/External/MediaLibraryKit
   /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib
Framework search paths:
   /Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Products/Debug-iphoneos
   /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/
LLVM version 3.1svn,from Apple Clang 4.0 (build 421.0.60)
ld: 'non_lazy_ptr' in /Users/bp/Library/Developer/Xcode/DerivedData/MobileVLC-ctcjnpeqzuhulxcmjlhrjnyzpzil/Build/Products/Debug-iphoneos/libmobileVLCKit.a(libdeinterlace_plugin_la-deinterlace.o) contains undefined reference for architecture armv7
clang: error: linker command Failed with exit code 1 (use -v to see invocation)

据我所知,libmobileVLCKit.a文件被链接到MobileVLC项目中,所以我不确定下一步要查找什么,因为我找不到任何代码中的任何地方的任何引用non_lazy_ptr,框架引用都看起来不错.即使你不知道解决方案,任何关于在哪里寻找问题的想法将不胜感激.谢谢.

编辑:这是一个屏幕截图,显示MobileVLC项目的“构建阶段”选项卡中的所有内容.

编辑2:我在VideoLAN论坛上的贴子已经得到了一些“我也是”的回复,以及与另一个用户非常相似的错误.最后一行是错误信息:

ld: '_AmplifyFloat' in /Users/**/MobileVLC/ImportedSources/VLCKit/build/Release-iphoneos/libmobileVLCKit.a(libvolume_neon_plugin_la-volume.o) contains undefined reference for architecture armv7

这是VideoLAN论坛上的贴子:http://forum.videolan.org/viewtopic.php?f=12&t=103433

编辑3:我从VideoLAN的git存储库中获取了一个新的源代码,并通过user1071136提供的答案,最后得到了与他们所得到的完全相同的错误.

我在Stack Overflow上发现了一个类似的错误,表明解决方案是检查,以确保Apple LLVC编译器4.0 – 代码生成构建设置中的Generate Position-Dependent Code选项被设置为No.但正如试图获得VLC在iOS上运行,这是一个死胡同,因为构建设置已经设置为否.

这是一个链接到这个问题和答案:(null): In section __TEXT,__text reloc 3: section For Address(0x7C6C) address not in any section for architecture armv7

解决方法

我没有能够成功构建它,但我已经克服了一些可能有用的障碍.

障碍1:ARM Thumb2

总结:即使广告作为完全支持的拇指,它似乎是苹果提供的clang,以及LLVM 3.2的一个无法翻译显示在libav的ARM汇编代码中的一些有效的Thumb指令.

详细信息:libav(ffmpeg的一个fork)在汇编器中实现了一些功能.当构建iOS时,将使用MobileVLC / ImportedSources / vlc / contrib / iPhoneOS / ffmpeg / libavcodec / arm中的文件.第一个可能遇到的编译错误是类似的

libavcodec/arm/aacpsdsp_neon.S:132:21: error: invalid operand for instruction
        add r4,r0,#38*64*4

根据ARM Thumb2’s reference,上述指令是有效的ADD {S} Rd,Rn,< Operand2>指令,其中< Operand2>拇指模式是“通过将8位值左移任意位形成的32位常数”.由于#38 * 64 * 4等于38左移8次,所以cl应该接受它.似乎cl声不会识别它是可能的,因此试图将该指令解释为ADD Rd,#< imm12>一个,即时争论必须小于4096.

如果对这个问题有更多信心的人可以相关 – 这是cl a吗?

解决方法:如http://forum.videolan.org/viewtopic.php?f=12&t=103271所示,配置ffmpeg(实际上是libav)时,应该禁用拇指.

障碍2:libtool不能推断标签

总结:MobileVLC的libtool被配置为推断C编译,它期望调用clang.当构建系统调用gas-preprocessor.pl xcrun clang时,libtool会引发错误.

详细信息:MobileVLC在MobileVLC / ImportedSources / vlc / build-ios-OS上配置一个libtool(它只是一个bash脚本)的副本.在第1681行,函数func_infer_tag负责推断标签.对于出现在第38行定义的变量$available_tags中的每个标签,都会搜索libtool本身的标签配置部分.例如,CXX(= C)标签配置从第9258行开始.从第9271行可以看出,C编译期望的编译器命令是xcrun clang.

构建系统调用libtool –mode = compile gas-preprocessor.pl xcrun clang …,因为xcrun clang不在命令前缀,所以不能推断C模式. (gas-preprocessor.pl将GNU汇编程序转换为Apple汇编程序可以使用的东西)

解决方法:如http://forum.videolan.org/viewtopic.php?f=12&t=103331所述,可以修改MobileVLC / ImportedSources / vlc / modules / video_filter / Modules.am以强制libtool推断C编译.如果它不适合你,就像它不适合我,你可以自己调用libtool.

cd进入MobileVLC / ImportedSources / vlc / build-ios-OS / modules / video_filter;键入make应该会导致出现错误.键入make V = 1也将显示正在执行的命令.它将从source =’deinterlace / merge_arm.S’开始.您现在可以将其复制并手动调用,在../../libtool之后添加–tag = CC.

障碍3:copyStringsFile

总结:构建MobileVLC失败,出现错误,

The following build commands Failed:
    copyStringsFile build/Release-iphoneos/VLC.app/pl.lproj/Localizable.strings Resources/pl.lproj/Localizable.strings

详细信息:违规文件MobileVLC / Resources / pl.lproj / Localizable.strings是缺少字节顺序(BOM)的UTF-16-LE文件,由于某些原因而使Xcode混淆.

解决办法:cd进入MobileVLC / Resources / pl.lproj /并执行

mv -n Localizable.strings Localizable.strings.backup && python -c "import sys; sys.stdout.write(chr(0xFF)+chr(0xFE))" > Localizable.strings && cat Localizable.strings.backup >> Localizable.strings

这会将BOM添加到文件的开头.

障碍4:non_lazy_ptr AmplifyFloat

摘要:此错误应为:“链接器ld的内部数据结构具有非延迟指针,其中包含无法找到的符号的地址”.找不到缺少的符号,因为它们没有加上下划线.

细节:这显然是一个耻辱,ld不会沉迷于我们知道究竟究竟找不到什么,但我们不在这里.

考虑以下简单的bla.c文件,

int bla();
int foo() { return bla(); }

编译这个文件(clang -c bla.c)然后列出它的符号(nm bla.o)显示链接器期望一些其他编译单元提供符号_bla(注意下划线).下划线可能被添加到表示bla应该在C调用约定中被调用.当在汇编文件中定义bla时出现问题;汇编器不添加下划线,导致bla符号,导致链接失败.

一个有趣的细节是,这种行为与Linux不同,下划线不会添加到符号名称中,这可能有助于解决VLC开发人员的注意力.然而,据我所知,强调的行为出现在MinGW中,所以解决方案可能类似.

解决方法:即使是临时的,最简单的解决方案是使用符号别名列表.创建一个具有以下内容的文件符号alias.txt,

merge16_arm_neon _merge16_arm_neon
merge8_arm_neon _merge8_arm_neon
amplify_float_arm_neon _amplify_float_arm_neon

根据标志和配置,该文件是足够的这对我来说足够了.在MobileVLC /目录中打开MobileVLC.xcodeproj.这应该是Xung Xcode.在项目设置中,选择MobileVLC目标,然后选择“构建设置”.在其他链接器标志中,添加

-Wl,-alias_list
-Wl,<absoluate-path-to-symbol_aliases.txt>

保存并构建.恭喜.你现在已经到达了障碍我不知道如何克服:)

障碍5:地址不在任何部分

摘要:链接器出现隐秘错误

ld: in section __TEXT,__text reloc 13: sectionForAddress(0xE142) address not in any section for architecture armv7

我对链接不够熟悉,弄清楚出了什么问题,但我猜想这一切都归结为汇编器编写的代码.

Xcode 4.4.1中的non_lazy_ptr的iOS SDK 5.1链接器错误的更多相关文章

  1. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  2. ios – Xcode在发布时崩溃

    我正在开发iOS应用程序,我在应用程序中没有更改任何内容.但是在重新启动我的Mac时,XCode每次都会崩溃.不知道这是否重要,但我的聚光灯找不到任何应用程序当我打开取景器并使用快捷键cmdshiftH时我看到一个白色的窗户.Xcode不再启动并抛出此错误:我希望有一个人可以帮助我.这会导致与权限冲突吗?

  3. xcode找不到匹配的配置文件

    我有一个AdhociOS应用程序,它给了我“在xcode6中找不到匹配的配置文件”,我创建了一个Adhoc配置文件,下载它,双击它并在General–Identity下选择了一个团队.但我接着得到了那条消息,并尝试使用“修复问题”按钮没有帮助.在构建设置–供应配置文件–发布我有“自动”.任何人都可以帮助我,我完全迷失了……

  4. 适用于iOS和路线的Google Maps SDK

    解决方法库中有一些东西不在文档中,所以如果你正在寻找一个功能,那么值得下载SDK并查看标题.然而,在当前版本1.0.2中,我没有看到任何路由–搜索路线或绘制路线.目前,您唯一的选择可能是使用其他GoogleApi来查找路径,然后正如Lee所说,使用折线绘制它们.

  5. iOS:调试无法在XCode中运行

    我正在使用XCode4和iOSSDK4.3.我的调试工作正常,但现在我发现在设置断点时,应用暂停,但XCode不关注编辑器中的行.点击断点时也不会显示绿色箭头.我有一个在AppDelegate中分配的UINavigationController.当我在didFinishLaunchingWithOptions中设置断点时,一切都按预期工作:这是当一个断点暂停了mapViewController中的

  6. ios – 如何/是否在Xcode中制作通用故事板

    在Xcode中创建故事板文件时,您必须选择是否适用于iPhone或iPad.这意味着应始终将iPhone和iPadUI放入单独的故事板中.这是真的?我的应用程序有多个故事板.虽然Main.storyboard文件在iPhone和iPad之间存在很大差异,但其他故事板几乎完全相同.唯一的区别可能是推动iPhone与iPhone上的popover,可以通过编程方式处理.制作两个故事板似乎非常愚蠢和多余.因此,如果制作一个“通用”故事板,是否应该在Xcode中选择iPhone或iPad?

  7. openURL崩溃:iOS 9中可能存在Facebook SDK错误

    也许Facebook的SDK在这个特例上有错误?解决方法我找到了答案看起来它只是一个发布模式问题.通过启用Xcode运行发布版本,我能够调试我的问题.它是由参数sourceApplication引起的,在发布模式下显然需要解包.不知道为什么,但至少我得到它的工作.

  8. 使用最新的Flurry SDK和ios4重新启动应用程序

    我真的希望这对我来说只是一个愚蠢的错误.我很高兴使用Flurry但这样的事情会导致我的应用被拒绝.解决方法我写了关于这个的Flurry,他们很快回到我身边,他们会调查这个.大约一个星期后,他们回信并表示他们已经在v2.6中修复了它,现在可用了.我似乎无法重现这个问题.不是说我很棒或者什么,但我还是单枪匹马地解决了这个问题.

  9. xcode – 如何通过LLDB命令行添加断点操作?

    如果你从Xcode编辑一个断点,有一个超级有用的选项,可以添加一个“Action”,以便在每次遇到断点时自动执行.如何从LLDB命令行添加此类操作?

  10. XCode:将故事板导出到图像

    我有一个小问题……

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部