我有一个静态库(C ++)(比如,libmylib_DARWIN.a
和libmylib_LINUX.a
用于2个架构)在我的Mac上使用clang编译(Apple 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有关,不讨论多平台,也没有提到存档名称。
答案 0 :(得分:1)
此脚本实现了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