Ссылка на файл .o, скомпилированный в Ubuntu с помощью cygwin

0

Мне дали три файла.o для класса.

f0.o f1.o f11.o

Я не знаю, что внутри них, все, что я знаю, это то, что у них есть функция

eval (int * pj);

Моя задача - определить максимальное значение этой функции с помощью альпиниста и генетического алгоритма

Файлы.o были скомпилированы на ubuntu. У меня 64-разрядная версия Windows 8. Я загрузил бит cygwin32 и бит cygwin64. Файлы.o 32 бит.

Я попытался связать их

g++ -std = С++ 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*)'

Я пробовал использовать их в Google и не получил никаких разумных результатов

Может кто-нибудь, пожалуйста, скажите мне, что случилось?

Вот код из 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));
}
Теги:
hyperlink
g++

1 ответ

1
Лучший ответ

undefined reference to 'ZNSt8ios_base4InitC1Ev' указывает на то, что компоновщик не может найти ссылку на ios_base.

Скорее всего, причина в том, что компилятор/компоновщик, используемый для создания вашего объектного файла, который вы получили (вероятно, gcc), и компилятора/компоновщика, используемого для сборки вашей программы (mingw32/mingw64), имеют несовместимые ABI. То есть, как вы не можете связать вывод MSVC с выходом GCC, я думаю, вам нужно использовать совместимый компилятор для этого.

Очевидным, гарантированным способом заставить его работать было бы просто создать вашу программу против предоставленного объектного файла на Ubuntu на виртуальной машине.

Однако Cygwin также может работать.

  • 0
    ах, я использовал Cygwin, а не Mingw, мой плохой; O, который выбрасывал эти ошибки. Файлы .o были скомпилированы с помощью g ++. Есть также версии GCC. cse.unr.edu/~sushil/class/ai/index.html (задание 2)
  • 0
    На моей 64-битной Linux-машине я скачал f0.o, скопировал / вставил код из вашего OP, а затем запустил g++ -c so.cpp && g++ so.o f0.o -o so и все работало нормально. Выполнение полученной программы выводит число, как и ожидалось. Ваш компилятор определенно является проблемой - если cygwin и mingw32 не работают, то я боюсь, что виртуальная машина Ubuntu, вероятно, ваш единственный вариант.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню