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

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, но в другой ОС. Все работает. ДЕЙСТВИЕ 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 работает прекрасно! Вопрос, почему не работал первый, скомпилированный у меня файл на сервере провайдера? Надо обязательно компилит по новой для другого Линукса? Разве полученный файл не бинарник, который должен работать на любом Линуксе?
×
×
  • Создать...