我正在尝试在Linux RHAS 5.3 64位系统上使用静态库生成一个非常简单的二进制文件。
test1.cpp将生成.o文件并嵌入到静态库中。
如果我使用32位编译,没有问题:
--(0931:Wed,06 Apr 11:$ )-- g++ -m32 -Wall -c ctest1.cpp --(0931:Wed,06 Apr 11:$ )-- file ctest1.o ctest1.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped --(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位编译,则在链接时会失败,出现错误“could not read symbols: Archive has no index; run ranlib to add one”:
--(0933:Wed,06 Apr 11:$ )-- g++ -m64 -Wall -c ctest1.cpp --(0935:Wed,06 Apr 11:$ )-- file ctest1.o ctest1.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped --(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: could not read symbols: Archive has no index; run ranlib to add one collect2: ld returned 1 exit status
在libctest.a上运行ranlib并没有改变任何东西。
我的Linux版本如下:
--(0937:Wed,06 Apr 11:$ )-- uname -a Linux dev1 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux
有人知道问题出在哪里吗?
谢谢。
void ctest1(int *i)
{
*i=5;
}
and 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:$ )-- file ctest1.o ctest1.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped --(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位编译,则在链接时会失败,出现错误“could not read symbols: Archive has no index; run ranlib to add one”:
--(0933:Wed,06 Apr 11:$ )-- g++ -m64 -Wall -c ctest1.cpp --(0935:Wed,06 Apr 11:$ )-- file ctest1.o ctest1.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped --(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: could not read symbols: Archive has no index; run ranlib to add one collect2: ld returned 1 exit status
在libctest.a上运行ranlib并没有改变任何东西。
我的Linux版本如下:
--(0937:Wed,06 Apr 11:$ )-- uname -a Linux dev1 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux
有人知道问题出在哪里吗?
谢谢。