我已经升级到 XCode 8.0,这让我很伤心。第一个问题与代码签名有关。我通过从常规项目设置中选择用于调试和发布的配置文件来解决这个问题。奇怪的是不知道为什么它不能正常工作,因为它与以前的 XCode 完美编译。以前 XCode 会说没有临时配置文件并提示修复它并且会修复它。似乎退后一步。无论如何,通过了那个问题。
我一整天都面临的问题是编译时出现这个错误
Undefined symbols for architecture arm64:
"_write_ret", referenced from:
_dwsl in libtestlib.a(testlib.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我搜索了write_ret,它只是一个头文件中的原型(prototype),根本没有在任何地方调用这个函数!! (背景静态库是一个更大项目的一部分,我只带来了为 iOS 编译静态库所需的文件/代码)。多年来,这是完美的编译。我回到静态库源代码,为了让自己开心,我删除了 write_ret 原型(prototype)并编译它,更新了我项目中的库并重新构建。再次出现同样的错误!这里发生了什么??我确认它确实使用了正确的内置库。
然后我决定只为 armv7 构建,因为这是一个企业应用程序。我回到静态库项目文件,从“valid architectures”中删除了 armv7s 和 arm64。我将“体系结构”更改为 armv7。我重建了库并用新库更新了项目。
我还进入了主项目并将有效架构更改为仅针对 armv7 构建。
这次当我构建我的项目时我得到了这个错误
ld: warning: ignoring file /Users/rrr/Library/Developer/Xcode/DerivedData/P-eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libtestlib.a,
file was built for archive which is not the architecture being linked (armv7):
/Users/rrr/Library/Developer/Xcode/DerivedData/P-eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libtestlib.a
在终端中我运行了 lipo libteSTLib.a -info 我得到了这个:
input file libtestlib.a is not a fat file
Non-fat file: libtestlib.a is architecture: armv7
所以它是为 armv7 构建的,那么 XCode 到底在提示什么?
我现在没主意了。任何人都可以在这里阐明一些问题吗?
我想让它在我周五进行的 XCode 升级之前与所有架构一起工作。但最坏的情况至少编译为仅适用于 armv7。我的理解是它仍然可以在任何 iPhone 5s 和更新版本的设备上运行。
最佳答案
首先,如您所知,按照 Apple 的规则,您应该支持 arm64 才能支持 64 位架构。
其次,让我们谈谈 undefined symbol 问题,您的第一个问题。
我不确定你的情况描述,但是,
我在阅读这个问题时想到的一件事是你的静态库可能依赖于一些从 Xcode 7 中弃用的 dylib(动态库或共享库)。
可能的情况是你的 dylib 库在 Xcode 8 更新版本的项目中被标记为红色,因为它被替换为 tbd 而不是 dylib。
所以,这个库现在缺少状态,你确实在图书馆列表中删除了它,但你忘记了它。
这就是为什么您的 libteSTLib.a 中的 _write_ret 符号不能再链接到架构 arm64。(dylib 缺少状态。)
如果这种情况属实,请导入待定而不是 dylib。(基于文本的 stub 库)。
我们来谈谈你的第二个与错误日志相关的问题。
ld: warning: ignoring file /Users/rrr/Library/Developer/Xcode/DerivedData/P- eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libtestlib.a,
file was built for archive which is not the architecture being linked (armv7):
/Users/rrr/Library/Developer/Xcode/DerivedData/P- eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libtestlib.a
此日志可能是关于 Xcode build设置中的 Build Active Architecture Only。
将“仅构建事件架构”从是到否选中。
当在您的build设置情况下将 Build Active Architecture Only 设置为 YES 时,可能会生成错误日志。
而且,如果它不起作用,您是否清理过 DerivedData 目录和项目?
如果您已经尝试过,您的静态库可能实际上不在/Users/rrr/Library/Developer/Xcode/DerivedData/P-eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libteSTLib.a 中。
所以,您可以将您的静态库输出移动到这个项目中,然后再试一次。
当我收到您的问题时,这些只是针对您的情况的情景。 我希望它能提供一点帮助。
谢谢。
关于ios - Mach-O 链接器错误,将 xcode 升级到 8.0 后未定义的体系结构符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39716678/
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案