BP.*_*BP. 14 xcode linker vlc ios
(我把这个问题发布到VideoLAN论坛,但还没有接受者.我知道SO社区不会让我失望.)
我正在尝试为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)
Run Code Online (Sandbox Code Playgroud)
据我所知,libMobileVLCKit.a文件链接到MobileVLC项目,因此我不确定接下来要查找什么,因为我在任何代码中找不到任何对non_lazy_ptr的引用,并且框架引用看起来都很好.即使你不知道解决方案,任何关于在哪里寻找问题的想法将不胜感激.谢谢.
编辑:这是一个屏幕截图,显示MobileVLC项目的Build Phases选项卡中的所有内容.

编辑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
Run Code Online (Sandbox Code Playgroud)
以下是VideoLAN论坛上的帖子:http://forum.videolan.org/viewtopic.php? f = 12&t = 103433
编辑3:我从VideoLAN的git存储库中获取了一个新的源代码副本,并通过user1071136获得了下面提供的答案,并最终得到了与他们相同的错误.
我在Stack Overflow上发现了一个类似的错误,表明解决方案是检查以确保构建设置中的Generate Position-Dependent Code选项Apple LLVC compiler 4.0 - Code Generation设置为否.但是像往常一样尝试让VLC在iOS上运行时,这也是一个死胡同为此,构建设置已设置为"否".
以下是该问题和答案的链接:(null):在__TEXT部分中,__ text reloc 3:部分地址(0x7C6C)地址不在任何部分中,用于体系结构armv7
use*_*136 12
我无法成功构建它,但我已经克服了一些可能有用的障碍.
简介:尽管被宣传为完全支持thumb,但它似乎提供了Apple clang,并且LLVM 3.2无法翻译thumb出现在libavARM-assembler代码中的一些有效指令.
细节 :( libav一个分支ffmpeg)在汇编程序中实现了一些功能.在为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
Run Code Online (Sandbox Code Playgroud)
根据ARM Thumb2的参考,上述指令是有效ADD{S} Rd, Rn, <Operand2>指令,其中<Operand2>in thumb模式是"32位常数,通过左移8位值乘以任意位数".由于#38*64*4等于38左移8次,clang应该接受它.似乎clang无法识别它是可能的,因此试图将指令解释为ADD Rd, Rn, #<imm12>一个,其中立即参数必须小于4096.
如果对这个主题更有信心的人可以联系到 - 这是一个错误clang吗?
解决方法:如http://forum.videolan.org/viewtopic.php?f=12&t=103271中所述,thumb配置时应禁用ffmpeg(事实上libav).
总结:MobileVLC的libtool被配置成推断C++汇编,其中预计的invokation一个clang++.当构建系统调用时gas-preprocessor.pl xcrun clang,libtool抛出错误.
详细信息:MobileVLC配置libtool(只是一个bash脚本)的副本MobileVLC/ImportedSources/vlc/build-ios-OS.在第1681行,该函数func_infer_tag负责推断标签.对于出现在第$available_tags38行定义的变量中的每个标记,将在其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' o….您现在可以复制它并手动调用,--tag=CC之后添加../../libtool.
摘要:构建MobileVLC失败并显示错误,
The following build commands failed:
CopyStringsFile build/Release-iphoneos/VLC.app/pl.lproj/Localizable.strings Resources/pl.lproj/Localizable.strings
Run Code Online (Sandbox Code Playgroud)
详细信息:违规文件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
Run Code Online (Sandbox Code Playgroud)
这会将BOM添加到文件的开头.
non_lazy_ptr+AmplifyFloat摘要:这个错误应该阅读:"连接器的一个内部数据结构ld具有非懒指针,它包含一个符号的地址ld无法找到".找不到缺少的符号,因为它们没有下划线前缀.
详细信息:这显然是一种耻辱,ld不会的知识放纵我们什么它到底能不能找到,但我们不是在这里咆哮.
考虑以下简单bla.c文件,
int bla();
int foo() { return bla(); }
Run Code Online (Sandbox Code Playgroud)
编译此文件(clang -c bla.c)然后列出其符号(nm bla.o)会显示链接器需要其他一些编译单元来提供符号_bla(请注意下划线).可能会添加下划线以表示bla应在C调用约定中调用.bla在汇编程序文件中定义时会出现问题; 汇编程序不添加下划线,导致bla符号,导致链接失败.
一个有趣的细节是,这种行为与Linux不同,其中下划线没有添加到符号名称,这可能有助于问题摆脱VLC的开发人员的注意.尽管如此,据我所知,MinGW中出现了强调行为,因此解决方案可能类似.
解决方法:即使是临时的,最简单的解决方案是使用符号别名列表.创建symbol-alias.txt包含以下内容的文件,
merge16_arm_neon _merge16_arm_neon
merge8_arm_neon _merge8_arm_neon
amplify_float_arm_neon _amplify_float_arm_neon
Run Code Online (Sandbox Code Playgroud)
这个文件足够取决于标志和配置; 不过,这对我来说已经足够了.open MobileVLC.xcodeproj在MobileVLC/目录中键入.这应该是laungh Xcode.在项目设置中,选择MobileVLC目标,然后Build Settings.在Other Linker Flags,添加
-Wl,-alias_list
-Wl,<absoluate-path-to-symbol_aliases.txt>
Run Code Online (Sandbox Code Playgroud)
保存并构建.恭喜.你现在已经到了障碍我不知道怎么克服:)
摘要:链接器因隐藏错误而失败
ld: in section __TEXT,__text reloc 13: sectionForAddress(0xE142) address not in any section for architecture armv7
Run Code Online (Sandbox Code Playgroud)
我不太熟悉链接以找出错误,但我想这一切都归结为用汇编语言编写的代码.
| 归档时间: |
|
| 查看次数: |
3878 次 |
| 最近记录: |