链接到使用cygwin在Ubuntu中编译的.o文件

时间:2013-10-07 21:05:11

标签: c++ windows hyperlink g++

我给了一个班级的三个.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));
}

1 个答案:

答案 0 :(得分:1)

错误undefined reference to 'ZNSt8ios_base4InitC1Ev'似乎表明链接器找不到对ios_base的引用。

最常见的原因是用于构建您给出的目标文件(可能是gcc)的编译器/链接器以及用于构建程序的编译器/链接器(mingw32 / mingw64)具有不兼容的ABI。也就是说,就像你无法将MSVC的输出与GCC的输出链接一样,我认为你需要使用兼容的编译器来完成它。

让它运行的明显,有保证的方法是简单地在虚拟机中的Ubuntu上针对提供的目标文件构建程序。

然而,Cygwin也可以工作。