Перейти к содержанию

armix

Members
  • Постов

    4
  • Зарегистрирован

  • Посещение

    Никогда

Сообщения, опубликованные armix

  1. EvilShadow писал(а) Mon, 08 January 2007 17:06

    armix писал(а) Mon, 08 January 2007 12:55

    Sleeping Daemon писал(а) Mon, 08 January 2007 12:34

    BSD != Linux != Unix

    Понятно?

    На www.h10.ru стоял также FreeBSD и все компилировалось нормально!!!

    Вы сказали

    Цитата:

    SERVER2 - сервер провайдера FreeBSD Linux сервер

    Об этом и речь.

    Теперь по Вашему посту. Вводный курс:

    Компиляция состоит из двух этапов:

    1. Создание объектного файла, то есть заготовки бинарника.

    2. Линковка, то есть связывание полученного объектного файла с системными библиотеками.

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

    ДЕЙСТВИЕ 1

    Вы взяли исходный код, собрали родной для системы объектный файл, после чего слинковали его с соотв. библиотеками. Все работает.

    ДЕЙСТВИЕ 2

    Вы копируете исполняемый файл ELF в систему FreeBSD, которая использует совершенно другой формат объектных файлов. Ничего не работает.

    ДЕЙСТВИЕ 3

    То же, что и 2, но теперь это не бинарник, а объектный файл, что сути не меняет.

    ДЕЙСТВИЕ 4

    То же, что и 1, но в другой ОС. Все работает. Smile

    ДЕЙСТВИЕ 5

    То же, что и 2

    Все понятно спасибо!

  2. Sleeping Daemon писал(а) Mon, 08 January 2007 12:34

    armix писал(а) Mon, 08 January 2007 14:18

    Привести исходник не могу, могу лишь более подробно все описать!

    Итак, мы имеем некий my.cpp который использует класс class.cpp.

    Есть 2 сервера:

    SERVER1 - мой локальный Debiweb Linux сервер

    SERVER2 - сервер провайдера FreeBSD Linux сервер

    /* Skip */

    Как я мог понять, все зависит от разных Линукс серверов, но почему такое происходит я не могу понять!

    По идее, компилируется программа и ее бинарник должен работать на Любом Линуксе.

    ЗЫ я пробовал ДЕЙСТВИЕ - 3 на бесплатном хостинге h10.ru - там все сработало и нормально скомпилировало!

    BSD != Linux != Unix

    Понятно?

    На www.h10.ru стоял также FreeBSD и все компилировалось нормально!!!

  3. Привести исходник не могу, могу лишь более подробно все описать!

    Итак, мы имеем некий my.cpp который использует класс class.cpp.

    Есть 2 сервера:

    SERVER1 - мой локальный Debiweb Linux сервер

    SERVER2 - сервер провайдера FreeBSD Linux сервер

    ДЕЙСТВИЕ - 1

    Копирую на SERVER1 class.cpp и компоную class.o, затем компилирую с my.cpp - получаю a.out ВСЕ РАБОТАЕТ ХОРОШО.

    ДЕЙСТВИЕ - 2

    Копирую на SERVER2 полученный на SERVER1 a.out получаю ошибку:

    $ ./a.out

    ELF binary type "0" not known.

    ./a.out: 14: Syntax error: ")" unexpected

    ДЕЙСТВИЕ - 3

    Копирую на SERVER2 полученный на SERVER1 class.o, затем компилирую с my.cpp получаю ошибку (привожу небольшой кусок ради экономия места на форуме!):

    : undefined reference to `cout'

    class.o(.text+0x686): In function `Class::SetCodePage(Code) const':

    : undefined reference to `ostream::operator<<(char const *)'

    class.o(.text+0x69f): In function `Class::SetCodePage(Code) const':

    : undefined reference to `cout'

    class.o(.text+0x6a4): In function `Class::SetCodePage(Code) const':

    : undefined reference to `ostream::operator<<(char const *)'

    class.o(.text+0xbcb): In function `Class::PrintBuffHexGetPost(void) const':

    : undefined reference to `cout'

    class.o(.text+0xbd0): In function `Class::PrintBuffHexGetPost(void) const':

    : undefined reference to `ostream::operator<<(char const *)'

    class.o(.text+0xbe4): In function `Class::PrintBuffHexGetPost(void) const':

    : undefined reference to `cout'

    class.o(.text+0xbe9): In function `Class::PrintBuffHexGetPost(void) const':

    : undefined reference to `ostream::operator<<(char const *)'

    class.o(.text+0xbf4): In function `Class::PrintBuffHexGetPost(void) const':

    : undefined reference to `ostream::operator<<(char const *)'

    class.o(.text+0xc04): In function `Class::PrintBuffHexGetPost(void) const':

    : undefined reference to `cout'

    class.o(.text+0xc09): In function `Class::PrintBuffHexGetPost(void) const':

    : undefined reference to `ostream::operator<<(char const *)'

    class.o(.text+0xc23): In function `Class::PrintBuffHexGetPost(void) const':

    : undefined reference to `cout'

    ДЕЙСТВИЕ - 4

    Копирую на SERVER2 class.cpp и компоную class.o, затем компилирую с my.cpp - получаю a.out ВСЕ РАБОТАЕТ ХОРОШО.

    ДЕЙСТВИЕ - 5

    Произвожу с полученными class.o, a.out на SERVER2 те же действия, только в обратном порядке на мой локальный Линукс сервер SERVER1 и получаю ошибки:

    $ ./a.out

    -bash: ./a.out: No such file or directory

    /tmp/ccpsgDbR.o: In function `main':

    /tmp/ccpsgDbR.o(.text+0x14): undefined reference to `Class::Class(void)'

    /tmp/ccpsgDbR.o(.text+0x28): undefined reference to `Class::SetCodePage(Code) const'

    /tmp/ccpsgDbR.o(.text+0x41): undefined reference to `Class::GetHttpHost(char *) const'

    class.o: In function `std::__verify_grouping(char const*, unsigned, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':

    class.o(.text+0xd): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const'

    class.o(.text+0x60): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned) const'

    class.o(.text+0x9d): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned) const'

    class.o(.text+0xc8): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned) const'

    class.o: In function `Class::Class[not-in-charge]()':

    Как я мог понять, все зависит от разных Линукс серверов, но почему такое происходит я не могу понять!

    По идее, компилируется программа и ее бинарник должен работать на Любом Линуксе.

    ЗЫ я пробовал ДЕЙСТВИЕ - 3 на бесплатном хостинге h10.ru - там все сработало и нормально скомпилировало!

  4. Есть некая программа на срр, я ее компилировал у себя на локальном Линухе и полученный файл a.out прекрасно работает там же!

    Затем я перенес этот файл на хостинг моего провайдера - там он не пашет выдает синтаксическую ошибку!

    Перекомпиляцией исходника на сервере провайдера - полученный a.out работает прекрасно!

    Вопрос, почему не работал первый, скомпилированный у меня файл на сервере провайдера?

    Надо обязательно компилит по новой для другого Линукса?

    Разве полученный файл не бинарник, который должен работать на любом Линуксе?

×
×
  • Создать...