Ant*_*hov 4 c++ static-libraries debug-symbols otool
我有一个使用 clang 在我的 Mac 上编译的静态库(C++)(例如,libmylib_DARWIN.a对于2 种架构)(如果有任何相关性的话)。libmylib_LINUX.aApple LLVM version 9.0.0 (clang-900.0.39.2)
目前,有两个问题:
它还显示用于存档的目标文件的名称
otool -Iv libmylib_DARWIN.a
Archive : libmylib_DARWIN.a
libmylib_DARWIN.a(firstobjectfile.cpp.o)
libmylib_DARWIN.a(secondobjectfile.cpp.o)
....
我想从此库中删除调试符号和存档文件名。我想知道是否有一种方便的方法可以在不改变我的构建配置的情况下做到这一点。
strip同时为 DARWIN 和 LINUX 构建的库执行此操作?我还有什么要注意的吗?strip似乎没有删除存档文件名SO上也有一些类似的问题;然而,我发现的那些涉及 iOS、Objective C,不谈论多平台,也不提及存档名称。
该脚本实现了 Sigismondo 的建议(解压存档,单独剥离每个目标文件,将其重命名1000.o、1001.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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10718 次 |
| 最近记录: |