Пользовательский неупорядоченный набор хэш-функции

0

Я впервые использую неупорядоченный набор для класса Data Structures. Когда я пытаюсь запустить этот код на нашем сервере школы, он говорит мне свою неправильную архитектуру. Вот мой основной код (RAJ.cpp):

#include<iostream>
#include<tr1/unordered_set>
#include "nflData.h"

using namespace std;
using std::tr1::unordered_set;
struct ihash: std::unary_function<NFLData, std::size_t> {
    std::size_t operator()(const NFLData& x) const
    {
        return x.getDown();//Currently just trying to return a value, will not be actual has function.
    }
};

int main(){
        string a = "20070906_NO@IND,1,46,42,IND,NO,2,6,27,(1:42) P.Manning pass deep left to M.Harrison for 27 yards TOUCHDOWN.,0,0,2007";
        string b = "20070906_NO@IND,1,46,42,IND,NO,3,6,27,(1:42) P.Manning pass deep left to [88'] for 27 yards TOUCHDOWN.,0,0,2007";
        string c = "20070906_NO@IND,1,46,42,IND,NO,,,27,A.Vinatieri extra point is GOOD Center-J.Snow Holder-H.Smith.,0,0,2007";

        unordered_set<NFLData, ihash> myset;
        cout << "\ninsert data a";
        myset.insert(NFLData(a));
        cout << "\ninsert data b";
        myset.insert(NFLData(b));
}

И вот основная ошибка, которую я получаю при попытке запустить после успешной компиляции с g++:

./test:  Exec format error. Wrong Architecture.

Следует отметить, что этот же код отлично работает при шаблонизации для целочисленного типа

Теги:
architecture
data-structures
hash
unordered-set

1 ответ

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

Вам нужно скомпилировать программу для типа машины, на которой вы собираетесь ее запустить. Тип машины, которую вы скомпилировали, не соответствует вашему школьному компьютеру.

Если в школе установлен компилятор на своем сервере, используйте его для компиляции вашей программы.

Вы можете видеть, какой тип исполняемого файла у вас есть с file командой под UNIX, Linux и MacOS X. Например:

$ file /bin/ls    # on my Linux box
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

$ file /bin/ls    # on my MacBook Pro
/bin/ls: Mach-O usiversal binary with 2 architectures
/bin/ls (for architecture x86_64):      Mach-O 64-bit executable x86_64
/bin/ls (for architecture i386):        Mach-O executable i386

Обычно разные операционные системы могут хотя бы минимально идентифицировать исполняемые файлы для внешних систем, но не всегда. То есть, он будет идентифицировать, что он чужой, но может быть не в состоянии определить, какая иностранная система.

Если вы компилируете код на своем школьном сервере, то происходит что-то еще странное. Приведенная выше команда file должна помочь исключить некоторые вещи. BTW, вы можете указать, какие флаги компилятора вы используете, и выход file для версии, которая работает, и версию, которая этого не делает.

Еще одна вещь, чтобы проверить: Убедитесь, что ваш последний шаг компиляции не включает в себя -c флаг в g++. Этот флаг сообщает g++, что вы создаете промежуточный объект, а не конечный объект.

Ещё вопросы

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