arm-linux-androideabi-strip无法重命名

时间:2014-07-22 10:05:13

标签: android linux android-ndk

多次使用arm-linux-androideabi-strip,原因如下:

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

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

请在下面发布答案。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

我的解决方法:

修改文件[android-ndk] /build/core/default-build-commands.mk中的cmd-strip宏,如下所示(请参阅我姓名的评论):

# 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 (orignial,un-stripped)和 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命令时出现问题。

格雷格