【发布时间】:2011-07-30 10:30:31
【问题描述】:
我正在尝试使用静态库在 Linux RHAS 5.3 64 位上生成一个非常简单的二进制文件。
test1.cpp,生成的 .o 将嵌入到静态库中。
void ctest1(int *i)
{
*i=5;
}
和prog.cpp
#include <stdio.h>
void ctest1(int *);
int main()
{
int x;
ctest1(&x);
printf("Valx=%d\n",x);
return 0;
}
如果我用 32 位编译,没问题:
--(0931:Wed,06 Apr 11:$)-- g++ -m32 -Wall -c ctest1.cpp
--(0931:Wed,06 Apr 11:$)-- 文件 ctest1.o
ctest1.o:ELF 32 位 LSB 可重定位,英特尔 80386,版本 1 (SYSV),未剥离
--(0931:Wed,06 Apr 11:$)-- ar -cvq libctest.a ctest1.o
a - ctest1.o
--(0931:Wed,06 Apr 11:$)-- g++ -m32 -o prog prog.cpp libctest.a
--(0931:Wed,06 Apr 11:$)-- ./prog
Valx=5
但是,如果我尝试以 64 位编译,它会在链接过程中失败并显示错误“无法读取符号:存档没有索引;运行 ranlib 以添加一个”:
--(0933:Wed,06 Apr 11:$)-- g++ -m64 -Wall -c ctest1.cpp
--(0935:Wed,06 Apr 11:$)-- 文件 ctest1.o
ctest1.o:ELF 64 位 LSB 可重定位,AMD x86-64,版本 1 (SYSV),未剥离
--(0933:Wed,06 Apr 11:$)-- ar -cvq libctest.a ctest1.o
a - ctest1.o
--(0935:Wed,06 Apr 11:$)-- g++ -m64 -o prog prog.cpp libctest.a
libctest.a:无法读取符号:存档没有索引;运行ranlib添加一个
collect2: ld 返回 1 个退出状态
在 libctest.a 上运行 ranlib 不会改变任何内容。
我的Linux版本如下
--(0937:Wed,06 Apr 11:$)-- uname -a
Linux dev1 2.6.18-128.el5 #1 SMP 2008 年 12 月 17 日星期三 11:41:38 EST x86_64 x86_64 x86_64 GNU/Linux
有人知道问题出在哪里吗?
谢谢。
【问题讨论】: