我给了一个班级的三个.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));
}
答案 0 :(得分:1)
错误undefined reference to 'ZNSt8ios_base4InitC1Ev'
似乎表明链接器找不到对ios_base的引用。
最常见的原因是用于构建您给出的目标文件(可能是gcc)的编译器/链接器以及用于构建程序的编译器/链接器(mingw32 / mingw64)具有不兼容的ABI。也就是说,就像你无法将MSVC的输出与GCC的输出链接一样,我认为你需要使用兼容的编译器来完成它。
让它运行的明显,有保证的方法是简单地在虚拟机中的Ubuntu上针对提供的目标文件构建程序。
然而,Cygwin也可以工作。