私は静的ライブラリを使ってLinux RHAS 5.3 64ビットで非常に単純なバイナリを生成しようとしています。C++ 64ビット - シンボルを読み取れませんでした:アーカイブにインデックスがありません。 runlibを実行して1つ追加する
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ビットで、問題なしでコンパイルした場合:
を./prog- (0931:水曜日、4月6日11:$) - -g ++ -m32 -Wall -c ctest1.cpp
- (0931:Wed、06 Apr 11:$) - ファイルctest1.o
ctest1.o:ELF 32ビットLSBリロケータブル、Intel 80386、v ERSION 1(SYSV)、
を取り除かない - (0931:水曜日、4月6日11:$) - AR -cvq libctest.a ctest1.o
- ctest1.o
- (0931:水、 4月06日11:$) - G ++ -m32 -o PROG prog.cpp libctest.a
- (0931:水、4月06日11:$)は -
Valx = 5
しかし、私が64ビットでコンパイルしようとすると、リンク中に "シンボルを読み取れませんでした:アーカイブにインデックスがありません。 「1を追加するRANLIBを実行します。
- (0933:水曜日、4月6日11:$) - G ++ -m64 -Wall -c ctest1.cpp
- (0935:水曜日06 4月11日:水、4月6日11::$) - : - $)ファイル
ctest1.o ctest1.o(0933)ELF 64ビットLSB再配置可能な、AMDのx86-64で、バージョン1(SYSV、
取り除きません - AR -cvq libctest.a ctest1.o
- ctest1.o
- (0935:水曜日、4月6日11:$) - G ++ -m64 -o progのprog.cpp libctest.a
libctest .a:シンボルを読み取ることができませんでした:アーカイブにインデックスがありません; ranlibを実行して1つを追加してください
collect2:ldが1の終了ステータスを返しました。
libctest.aでranlibを実行しても何も変更されません。
私のLinuxバージョンは、次の
である - (0937:水曜日、4月6日11:$) - のuname -a
Linuxは2.6.18-128.el5#1 SMP水12月をDEV1 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux
問題はどこから来ているのですか?
ありがとうございました。
はい* .o、* .aとbinファイルが両方の世代で削除されました。 – paf
BTW GCCのバージョンも4.1.2 – paf
です。問題は見つかりました。私のマシンにインストールされているbinutilsのバージョンは非常に古いです! GNU ar 2.10.90。私はそれを更新し、今私は適切にリンクします。ご協力いただきありがとうございます! – paf