我想使用靜態庫在Linux RHAS 5.3 64位上生成一個非常簡單的二進制文件。C++ 64位 - 無法讀取符號:歸檔沒有索引;運行ranlib添加一個
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:週三,11年4月6日:$) - - g ++ -m32 -Wall -c ctest1.cpp
- (0931:Wed,06 Apr 11:$) - file ctest1.o
ctest1.o:ELF 32位LSB可重新定位,Intel 80386,v版爲1(SYSV),不剝離
- (0931:週三,11年4月6日:$) - AR -cvq libctest.a ctest1.o
一個 - ctest1.o
- (0931:週三, 11年4月6日:$) - 克++ -m32 -o PROG prog.cpp libctest.a
- (0931:星期三,11年4月6日:$) - ./prog
Valx = 5
但是,如果我嘗試在64位編譯,它在鏈接期間失敗,出現錯誤「無法讀取符號:歸檔沒有索引;運行ranlib命令來添加一個「:
- (0933:週三,11年4月6日:$) - G ++ -m64 -Wall -c ctest1.cpp
- (0935:週三,11年4月6日:$) - 文件ctest1.o
ctest1.o:ELF 64位LSB可重新定位,AMD x86-64,版本1(SYSV),未去除
- (0933:Wed,06 Apr 11:$) - AR -cvq libctest.a ctest1.o
一個 - ctest1.o
- (0935:星期三,11年4月6日:$) - 克++ -m64 -o PROG prog.cpp libctest.a
libctest .a:無法讀取符號:存檔沒有索引;運行ranlib添加一個
collect2:ld返回1退出狀態
在libctest.a上運行ranlib不會更改任何內容。
我的Linux版本如下
- (0937:週三,11年4月6日:$) - UNAME -a
Linux的DEV1 2.6.18-128.el5#1 SMP星期三十二月17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux
有沒有人有一個想法,問題來自哪裏?
謝謝。
是* .o,* .a et bin文件在兩代之間被刪除。 – paf 2011-04-06 01:12:34
順便說一句GCC版本也是4.1.2 – paf 2011-04-06 01:13:04
好的,我發現這個問題,我的機器上安裝的binutils版本很老! GNU ar 2.10.90。我更新了它,現在我正確鏈接。謝謝你的幫助! – paf 2011-04-06 06:12:02