0

クラス用に 3 つの .o ファイルが与えられました。

f0.o f1.o f11.o

中に何が入っているかわかりませんが、機能があることだけは知っています。

eval(int *pj);

私の仕事は、ヒルクライマーと遺伝的アルゴリズムを使用してその関数の最大値を決定することです

.o ファイルは ubuntu でコンパイルされました。Windows 8 64 ビットを実行しています。cygwin32 ビットと cygwin64 ビットをダウンロードしました。.o ファイルは 32 ビットです。

私はそれらをリンクしようとしました

g++ -std=c++11 f0.o main.o -lm

ただし、これらのエラーが発生します (f1.o および f11.o の他の多くのエラー)。

f0.o: In function `Z41__static_initialization_and_destruction_0ii':
f0.cpp:(.text+0x9c): undefined reference to `ZNSt8ios_base4InitC1Ev'
f0.cpp:(.text+0xa1): undefined reference to `ZNSt8ios_base4InitD1Ev'
f0.cpp:(.text+0xa9): undefined reference to `_dso_handle'
f0.cpp:(.text+0xb9): undefined reference to `_cxa_atexit'
/tmp/ccdsysP1.o:main.cpp:(.text+0x4f): undefined reference to `eval(int*)'

これらをグーグルで調べてみましたが、妥当な結果が得られません

誰が何が悪いのか教えてもらえますか?

main.cpp のコードは次のとおりです。

#include <iostream>

using namespace std;

double eval(int *pj);

int main()
{

  int vec[150];

  int i;

  for(i = 0; i < 150; i++){
    vec[i] = 1;
  }
  cout << eval(vec) << endl;
  //printf("Fitness = %lf\n", eval(vec));
}
4

1 に答える 1

1

このエラーundefined reference to 'ZNSt8ios_base4InitC1Ev'は、リンカがios_baseへの参照を見つけられないことを示しているようです。

この理由のほとんどは、与えられたオブジェクト ファイル (おそらく gcc) をビルドするために使用されるコンパイラ/リンカーと、プログラムをビルドするために使用されるコンパイラ/リンカー (mingw32/mingw64) が互換性のない ABI を持っているためです。つまり、MSVC の出力を GCC の出力にリンクできないのと同じように、互換性のあるコンパイラを使用する必要があると思います。

それを機能させるための明白で保証された方法は、仮想マシンの Ubuntu で提供されたオブジェクト ファイルに対してプログラムをビルドすることです。

ただし、Cygwin も動作する場合があります。

于 2013-10-07T21:11:19.987 に答える