Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Проблемы при сборке, помогите решить  (Прочитано 3647 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Costa

  • Автор темы
  • Активист
  • *
  • Сообщений: 405
    • Просмотр профиля
День добрый!
Собираю тут одну программку и никак не могу взять в толк, где грабли.
Под виндой в Dev-C++ 4.9.9.2 собирается без проблем вот так:
g++ -c AES.cpp -o AES.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Dev-Cpp/include/c++/3.4.2/backward"  -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"C:/Dev-Cpp/include/c++/3.4.2"  -I"C:/Dev-Cpp/include"
Под Убунтой, собирая вот так (так у приятеля без проблем собирается, правда на другом дистре):
g++ -c AES.cpp -o AES.oполучаю такие грабли:
In file included from DataBuffer.h:27,
from AES.h:21,
from AES.cpp:18:
ByteString.h: In static member function ‘static int std::char_traits::compare(const unsigned char*, const unsigned char*, size_t)’:
ByteString.h:35: error: ‘memcmp’ was not declared in this scope
ByteString.h: In static member function ‘static unsigned char* std::char_traits::copy(unsigned char*, const unsigned char*, size_t)’:
ByteString.h:39: error: ‘memcpy’ was not declared in this scope
ByteString.h: In static member function ‘static unsigned char* std::char_traits::move(unsigned char*, const unsigned char*, size_t)’:
ByteString.h:43: error: ‘memmove’ was not declared in this scope
ByteString.h: In static member function ‘static unsigned char* std::char_traits::assign(unsigned char*, size_t, char)’:
ByteString.h:47: error: ‘memset’ was not declared in this scope
ByteString.h: In static member function ‘static const unsigned char* std::char_traits::find(const unsigned char*, size_t, const char&)’:
ByteString.h:51: error: ‘memchr’ was not declared in this scope
ByteString.h: In static member function ‘static int std::char_traits::eof()’:
ByteString.h:55: error: ‘EOF’ was not declared in this scope
ByteString.h: In static member function ‘static int std::char_traits::not_eof(const int&)’:
ByteString.h:67: error: ‘EOF’ was not declared in this scope

Чего же ему надо? Может надо какой пакет доставить или вручную пути к инклудам прописать? Посоветуйте.

ByteString.h
(Нажмите, чтобы показать/скрыть)
Чуть более подробные исходники - во вложении.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Проблемы при сборке, помогите решить
« Ответ #1 : 12 Января 2010, 18:25:56 »
Не хватает
#include <cstring>
#include <cstdio>

Оффлайн Costa

  • Автор темы
  • Активист
  • *
  • Сообщений: 405
    • Просмотр профиля
Re: Проблемы при сборке, помогите решить
« Ответ #2 : 13 Января 2010, 11:58:54 »
Mam(O)n, спасибо, помогло!

Правда, повылезали warnings, почти все поубирал, но осталось пара настырных.

Вот здесь (фрагмент исходников) первая строчка выдает
warning: deprecated conversion from string constant to ‘char*’
char *keyString = "KEYx";
keyString[3] = i - 1 + '1';

И то же самое предупреждение во второй строчке:
DataBuffer var;
var = "bla-bla-bla";
DataBuffer во вложении.

Как это исправить?

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Проблемы при сборке, помогите решить
« Ответ #3 : 13 Января 2010, 12:25:49 »
По новым правилам GCC строка должна быть const.


http://www.daniweb.com/forums/thread156711.html

int main(void) {
  char *keyString1 = "KEYx";
  char keyString2[] = "KEYx";
  const char *keyString3 = "KEYx";
  return 0;
}
$ g++ string_constant.c
string_constant.c: In function ‘int main()’:
string_constant.c:2: warning: deprecated conversion from string constant to ‘char*’

Т.е. на первую строку выдается предупреджение, на остальные - нет. У g++ есть ключ для отключения этого предупреждения.
« Последнее редактирование: 13 Января 2010, 12:27:43 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Costa

  • Автор темы
  • Активист
  • *
  • Сообщений: 405
    • Просмотр профиля
Re: Проблемы при сборке, помогите решить
« Ответ #4 : 13 Января 2010, 12:36:56 »
Сделал так:
char keyString[] = "KEYx";проходит.

А второе как поправить? Отключать предупреждения не хотелось бы, мало ли потом какие баги попрут.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Проблемы при сборке, помогите решить
« Ответ #5 : 13 Января 2010, 12:55:00 »
Недосуг мне скачивать архив, распаковывать его и лазить по тексту.
Если тип DataBuffer объявлен как-нибудь наподобие char * или char[ ], то вообще-то надо бы использовать strdup или strcpy.
Если это string, тогда можно написать string("blah-blah-blah");

На будущее рекомендую пользоваться spoiler-ами здесь или http://pastebin.com
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Проблемы при сборке, помогите решить
« Ответ #6 : 13 Января 2010, 13:04:14 »
А второе как поправить? Отключать предупреждения не хотелось бы, мало ли потом какие баги попрут.
В классе DataBuffer у Вас такие конструкторы.
   DataBuffer();

   DataBuffer(const DataBuffer& buffer);

   DataBuffer(const char *hexString);

   DataBuffer(const char *hexString, size_t length);

   DataBuffer(const unsigned char *data, size_t length);

   DataBuffer(size_t size, unsigned char fill = 0);


Какой соответствует Вашему объявлению ? 8)


Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Проблемы при сборке, помогите решить
« Ответ #7 : 13 Января 2010, 13:05:49 »
А оператора = перегруженного там нет?
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Costa

  • Автор темы
  • Активист
  • *
  • Сообщений: 405
    • Просмотр профиля
Re: Проблемы при сборке, помогите решить
« Ответ #8 : 13 Января 2010, 13:12:07 »
Кстати, есть:

DataBuffer& operator =(const DataBuffer& buffer);
DataBuffer& operator =(char *rvalue);
DataBuffer& operator =(const ByteString& string);
//=============================================================================
// Assignment operator for rvalue of type DataBuffer

DataBuffer& DataBuffer::operator = (const DataBuffer& buffer)
{
deleteHexString();

ByteString::operator=(buffer);

return *this;
}


//=============================================================================
// Assignment operator for rvalue of type char * (that is, string)

DataBuffer& DataBuffer::operator = (char *rvalue)
{
parse(rvalue, strlen(rvalue));

return *this;
}


//=============================================================================
// Assignment operator for rvalue of type ByteString

DataBuffer& DataBuffer::operator = (const ByteString& string)
{
ByteString::operator =(string);

return *this;
}

Спасибо за наводку, сейчас попробую сам дотумкать! :) В C++ я не очень мастак, в основном C, а код изначально написан Атмелом.

Пользователь решил продолжить мысль 13 Января 2010, 13:17:36:
Все сделал, огромное все спасибо!

DataBuffer& operator =(char const *rvalue);//=============================================================================
// Assignment operator for rvalue of type char * (that is, string)

DataBuffer& DataBuffer::operator = (char const *rvalue)
{
parse(rvalue, strlen(rvalue));

return *this;
}
« Последнее редактирование: 13 Января 2010, 13:17:36 от Costa »

 

Страница сгенерирована за 0.029 секунд. Запросов: 25.