【问题标题】:arm-linux-androideabi-strip unable to renamearm-linux-androideabi-strip 无法重命名
【发布时间】:2014-07-22 10:05:12
【问题描述】:

多次获取arm-linux-androideabi-strip,原因如下所述。

原因:文件存在
原因:资源繁忙

无法通过谷歌或堆栈溢出得到答案(发布有类似问题的帖子)。

请在下面发布答案。

【问题讨论】:

  • 因为这是一个问答网站,所以当您发布问题时,它应该是一个问题,而当您发布答案时,它应该尝试为手头的问题提供答案。如果您遇到了在 StackOverflow 上找不到答案但最终还是能够解决的问题,您可以做的是针对您遇到的问题提出一个问题,然后自己发布答案。
  • 当然@Michael 谢谢。将编辑问题。
  • 我重启了电脑,一切正常。可能是某些应用程序挂在内存中或某些文件被锁定。

标签: android linux android-ndk


【解决方案1】:

如果您收到错误消息说 arm-linux-androideabi-strip 无法重命名并且原因是文件存在并且资源繁忙,请注意某些 Tortoise 版本的资源管理器(例如:TGitCache.exe)正在运行进程,尝试杀死它或stopping it gracefully,然后再次尝试构建。它会成功。它也可以是任何其他资源保存过程,并且大多数时候是它的存储库软件。

【讨论】:

    【解决方案2】:

    我在 2016 年 2 月在一个非常小的原生共享库构建中遇到了同样的问题,而我的大型 .so 项目工作了多年,没有任何问题。这似乎是命令 arm-linux-androideabi-strip (或 i686-linux-android-strip,无论您正在构建什么 abi)中的某种竞争条件。我猜,在它实际关闭原始文件之前,strip 命令会尝试用剥离的文件替换原始 .so 文件。在这里或其他技术帖子中找到的答案都没有对我有用。该构建可能在大约 20% 的情况下正常工作,而在 80% 的构建中给我 [...]-linux-androideabi-strip 无法重命名 错误。在这个问题上浪费了整个下午和晚上......

    我的解决方法:

    修改文件[android-ndk]/build/core/default-build-commands.mk中的cmd-strip宏如下(见我名字的cmets):

    # The strip command is only used for shared libraries and executables.
    # It is thus safe to use --strip-unneeded, which is only dangerous
    # when applied to static libraries or object files.
    # GKochaniak, at the end of next line added: -o $(call host-path,$1).strip 
    cmd-strip = $(PRIVATE_STRIP) --strip-unneeded $(call host-path,$1) -o $(call host-path,$1).strip
    

    现在构建,而不是一个 libMyShared.so 在最终安装目录中生成两个文件:libMyShared.so(原始,未剥离)和 libMyShared.so.strip(已剥离)。我们只需要删除原始文件并重命名剥离的文件。我通过如下修改 [android-ndk]/build/core/build-binary.mk(同一文件夹)来做到这一点:

    $(LOCAL_INSTALLED): $(LOCAL_BUILT_MODULE) clean-installed-binaries
        $(call host-echo-build-step,$(PRIVATE_ABI),Install) "$(PRIVATE_NAME) => $(call pretty-dir,$(PRIVATE_DST))"
        $(hide) $(call host-install,$(PRIVATE_SRC),$(PRIVATE_DST))
        $(hide) $(PRIVATE_STRIP_CMD)
    # GKochaniak added 2 lines below:   
        rm $(PRIVATE_DST)
        mv $(PRIVATE_DST).strip $(PRIVATE_DST)
    

    注意:当我在 Windows 上工作时,我必须使用 rm.exe 和 mv.exe 命令将 Cygwin bin 文件夹放入我的系统路径中,作为此 make 文件中的路径使用正斜杠,因此当我尝试使用 del、ren 命令时出现问题。

    格雷格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2011-12-23
      相关资源
      最近更新 更多