如何解决如何防止 strip 删除 ar 存档的索引? 完整示例
我编写了一个包含 a.c
和 b.c
的库,以及另一个使用该库的程序 c.c
。我已使用 ar
将库 存档以进行分发。以下是我使用的命令:
gcc -g -c -o a.o a.c # Compile a.c
gcc -g -c -o b.o b.c # Compile b.c
ar r ab.a a.o b.o # Generate library ab.a
gcc -o c c.c ab.a # Compile c.c
到目前为止一切正常。但我想去掉 ab.a
中的一些部分(例如调试信息、内部函数),所以我在库上运行 strip --keep-symbol=... ab.a
。现在我不能再编译 c.c 了。我得到的错误是:
+ gcc -o c c.c ab.a
/usr/bin/ld: ab.a: error adding symbols: archive has no index; run ranlib to add one
collect2: error: ld returned 1 exit status
如果我在剥离后运行 ranlib ab.a
,一切正常。我的问题是:是否可以更改 strip
命令中的参数,以便我不需要运行 ranlib ab.a
?
完整示例
a.c
:
int a1()
{
return 1;
}
int a2()
{
return 2;
}
b.c
:
int b1()
{
return 3;
}
int b2()
{
return 4;
}
c.c
:
#include <stdio.h>
int a1();
int a2();
int b1();
int b2();
int main()
{
printf("%d ",a1());
printf("%d ",a2());
printf("%d ",b1());
printf("%d\n",b2());
}
Bash 脚本到“存档没有索引”错误:
gcc -g -c -o a.o a.c
gcc -g -c -o b.o b.c
ar r ab.a a.o b.o
strip --keep-symbol={a1,a2,b1,b2} ab.a
# ranlib ab.a
gcc -o c c.c ab.a
./c
运行 bash 脚本
- 直接运行bash脚本->查看错误
- 注释
strip
行 -> 成功(符号未剥离) - 取消注释
ranlib
行 -> 成功
我使用的软件版本:
- gcc (GCC) 10.2.1 20201125(红帽 10.2.1-9)
- GNU ar 版本 2.35-18.fc33
- GNU 剥离版本 2.35-18.fc33
- GNU ranlib 版本 2.35-18.fc33
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。