Strip/Remove 从静态库中调试符号和存档名称
Strip/Remove debug symbols and archive names from a static library
我有一个静态库 (C++)(例如,libmylib_DARWIN.a
和 libmylib_LINUX.a
用于 2 种架构)使用 clang 在我的 Mac 上编译(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
on Mac 会同时为 DARWIN 和 LINUX 构建的库执行此操作吗?还有什么需要注意的吗?
strip
似乎没有删除存档文件名
SO上有一些类似的问题;但是,我发现的那些处理 iOS、Objective C,不谈论多平台,也不提及存档名称。
此脚本实现了 Sigismondo 的建议(解压缩存档,单独剥离每个目标文件,将它们重命名为 1000.o
、1001.o
等,然后重新打包)。 ar crus
的参数可能因您的 ar
版本而异。
#!/bin/bash
# usage: repack.sh file.a
if [ -z "" ]; then
echo "usage: repack file.a"
exit 1
fi
if [ -d tmprepack ]; then
/bin/rm -rf tmprepack
fi
mkdir tmprepack
cp 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++)(例如,libmylib_DARWIN.a
和 libmylib_LINUX.a
用于 2 种架构)使用 clang 在我的 Mac 上编译(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
on Mac 会同时为 DARWIN 和 LINUX 构建的库执行此操作吗?还有什么需要注意的吗? strip
似乎没有删除存档文件名
SO上有一些类似的问题;但是,我发现的那些处理 iOS、Objective C,不谈论多平台,也不提及存档名称。
此脚本实现了 Sigismondo 的建议(解压缩存档,单独剥离每个目标文件,将它们重命名为 1000.o
、1001.o
等,然后重新打包)。 ar crus
的参数可能因您的 ar
版本而异。
#!/bin/bash
# usage: repack.sh file.a
if [ -z "" ]; then
echo "usage: repack file.a"
exit 1
fi
if [ -d tmprepack ]; then
/bin/rm -rf tmprepack
fi
mkdir tmprepack
cp 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