0

一个班级给了我三个 .o 文件。

f0.o f1.o f11.o

我不知道它们里面是什么,我只知道它们有一个功能

评估(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 回答