从静态库中去除/删除调试符号和存档名称
Strip/Remove debug symbols and archive names from a static library
我有一个静态库(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) ....
我想从这个库中删除调试符号和存档的文件名。我想知道是否有一种方便的方法可以在不更改我的构建配置的情况下做到这一点。
- Mac 上的
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
相关文章:
- VC++本机单元测试,找不到调试符号
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- GDB:运行不带符号的 cpp 进程调试
- 标识gdb调试器中符号的源文件名
- 有没有一种预处理器的方法可以从调试符号中删除代码段
- 简单的cmake项目,在Windows上使用nmake构建没有调试符号
- 重新定位源文件时读取调试符号
- 如何将libc++与调试符号链接起来?
- 在 gdb (Windows) 中添加 dll 的调试符号
- 如何定义具有依赖于符号调试的参数的函数
- 从静态库中去除/删除调试符号和存档名称
- Nodejs本机模块 - 如何删除调试符号
- 如何告诉 clang 将调试符号放入可执行二进制文件中
- G++ 切换为不包含自己的符号函数名称(和调试数据)-
- G++ 不生成调试符号
- GDB正在调试一个缺少特定调用堆栈的符号表的核心转储
- 如何为安卓原生应用生成调试符号
- Makefile和QT5:链接QT5与调试符号
- 带有 OpenGL 的项目符号调试抽屉