gpt4 book ai didi

c++ - 从静态库中剥离/删除调试符号和存档名称

转载 作者:行者123 更新时间:2023-11-30 05:02:54 24 4
gpt4 key购买 nike

我在我的 Mac 上使用 clang (Apple LLVM 版本 9.0.0 (clang-900.0.39.2) 如果有任何相关性)。

目前有两个问题:

  1. 静态库(使用当前构建配置)包含调试符号
  2. 它还显示了用于存档的目标文件的名称

    otool -Iv libmylib_DARWIN.a

    存档:libmylib_DARWIN.a
    libmylib_DARWIN.a(firstobjectfile.cpp.o)
    libmylib_DARWIN.a(secondobjectfile.cpp.o)
    ....

我想从这个库中删除两者调试符号和归档文件名。我想知道是否有一种方便的方法无需更改我的构建配置。

  • Mac 上的 strip 是否会同时针对 DARWIN 和 LINUX 构建的库执行此操作?还有什么需要注意的吗?
  • strip 似乎没有删除存档文件名

SO上有一些类似的问题;然而,我发现的那些处理 iOS、Objective C,不谈论多平台,也不提到存档名称。

最佳答案

此脚本实现了 Sigismondo 的建议(解压缩存档,单独剥离每个目标文件,将它们重命名为 1000.o1001.o 等,然后重新打包)。 ar crus 的参数可能因您的 ar 版本而异。

#!/bin/bash
# usage: repack.sh file.a

if [ -z "$1" ]; then
echo "usage: repack file.a"
exit 1
fi

if [ -d tmprepack ]; then
/bin/rm -rf tmprepack
fi

mkdir tmprepack
cp $1 tmprepack
pushd tmprepack

basename=${1##*/}

ar xv $basename
/bin/rm -f $basename
i=1000
for p in *.o ; do
strip -d $p
mv $p ${i}.o
((i++))
done

ar crus $basename *.o
mv $basename ..

popd
/bin/rm -rf tmprepack
exit 0

关于c++ - 从静态库中剥离/删除调试符号和存档名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com