LINUX.ORG.RU

Как компилировать программы, написанные до gcc 4.3 ?


0

0

Не компилируются ни blackbox, ни старый fluxbox-0.1.14 (я знаю, что есть новый, но хочу поглядеть на старый), ни ipager для современного fluxbox'а и т.д. Выдаются ошибки, говорящие что всякие malloc-и да strlen-ы «was not declared in this scope».

Лазяя в яндексах и лоровском поисковике, узнал, что виной тому выход gcc 4.3, где некоторые заголовочные файлы были переиначены, из-за чего надо старым исходникам подключать cstdlib, cstring. Вопрос: как это сделать? Как подключить эти cstdlib, cstring ? Можно ли это как-то задать в качестве параметра для ./configure ? А как это можно задать scons-у ? Нужно ли подключать что-то кроме cstdlib и cstring ?

Ну вообщето cstdlib, cstring это С++сная обёртка для сишных хедеров с наймспейсами и шлюхами. Такчто врядли в этом проблема.

На новом g++ может не компилиться если в твоей программе были строчки вроде #include <iostream.h>

golodranez ★★★★
()

Если здесь есть знатоки, подскажите, поможет ли ТС'у запуск какого0нибудь automake или autoconf? Проверить сегодня уже не могу.

name_no ★★
()

А поставить gcc старой версии не вариант?
Что за дистрибутив?
В gentoo для этого есть slot-ы.
Впрочем, есть высокий шанс наступить на грабли при сборке разных пакетов разными версиями компилятора.

CyberTribe ★★
()

А вы не пробовали в chroot-песочнице поставить старые библиотеки вместе со старым gcc и скомпилировать?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

В этой статье ( http://thelogin.ru/wiki/GCC_4.3_%D0%B8_..._was_not_declared_in_this_scope ) написано (цитирую):

«При переходе на g++ 4.3 во время компиляции старых исходников могут возникать ошибки типа: rccpatch.cpp:182: error: 'strlen' was not declared in this scope ... То есть функция из очевидно присутствующей (и configure-скрипт это подтверждает) библиотеки вдруг отсутствует. Причина: C++ != C Для исправления открываем исходник ... находим строки, подключающие библиотеки (например, #include <string> и дописываем в начало заголовка букву c: #include <cstring> После чего делаем make ещё раз » <-- Конец цитаты.

У меня выходит такая картина с blackbox-0.70.1:

Image.cc:1350: error: 'memcpy' was not declared in this scope

1. memcpy, как я выяснил, находится в string.h 2. Иду в Image.cc и вижу, что там #include <Image.hh> 3. Иду в Image.hh и вижу, что там #include <Util.hh> 4. Иду в Util.hh и вижу там #include <string> (ага, прям как в статье, которую я процитировал) 5. Меняю в Util.hh <string> на <cstring> (как в статье советуют) и снова делаю make - вылетает куча ошибок, вообще ничего не компилится 6. Тогда обратно возвращаю <string> вместо <cstring> в Util.hh, а ниже подписываю #include <string.h> затем запускаю снова make - компиляция продолжается, и Image.cc, и Util.cc компилятся (появляются *.o файлы), но вдруг компиляция прерывается на такой ошибке (о которой в статье ни слова):

XDG.cc:65: error: 'find' is not a member of 'std'

PS

Что за дистрибутив?

дистрибутив openSUSE,

А поставить gcc старой версии не вариант?

тоже попробую, авось проканает

yashik-s-ushami
() автор топика
Ответ на: комментарий от yashik-s-ushami

автор этой статьи чушь написал.

Тебе надо добавить

#include <cstring>

в те .cpp файлы, где используется strlen и другие функции из cstring (memcpy, и т.д.)

<string> удалять нельзя, т.к. это declarations для C++ класса строки (std::string).

alex_custov ★★★★★
()
Ответ на: комментарий от Booster

#include <algorithm>


Урра, blackbox скомпилировался и работает. Задам последний вопрос, прозапас.

Начну издали:
Когда выдавались ошибки про всяческие Сишные функции memcpy, strlen и прочие, можно было просто вбить «man memcpy», «man strlen», ... и узнать, какой #include дописывать.

Но как бы я мог узнать, что для std::find нужен <algorithm> ? Это ведь уже Си++, и если я впредь столкнусь с подобными ошибками, навроде chto-nibud::chto-to-tam, то как мне выяснить что нужно инклюдить для этих гипотетических chto-nibud::chto-to-tam ? Всмысле может есть какие-нить man-ы по Си++, где был бы список тамошних базовых классов и инклюде-файлов, в которых они содержаться ?

yashik-s-ushami
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.