LINUX.ORG.RU

g++ и kylix


0

0

имеется Borland kylix, установленный в /usr/local.

Дальше выясняется, что у борланда есть свой stdlib.h, который малость несовместим с обычным, и g++ перестаёт работать.

g++ solution.cpp
In file included from /usr/include/c++/4.3/cstdlib:73,
from /usr/include/c++/4.3/bits/stl_algo.h:65,
from /usr/include/c++/4.3/algorithm:67,
from solution.cpp:2:
/usr/local/include/stdlib.h:88: error: redefinition of 'template<class _T> const _T& std::min(const _T&, const _T&)'
/usr/include/c++/4.3/bits/stl_algobase.h:188: error: 'template<class _Tp> const _Tp& std::min(const _Tp&, const _Tp&)' previously declared here
/usr/local/include/stdlib.h:96: error: redefinition of 'template<class _T> const _T& std::max(const _T&, const _T&)'
/usr/include/c++/4.3/bits/stl_algobase.h:210: error: 'template<class _Tp> const _Tp& std::max(const _Tp&, const _Tp&)' previously declared here


Собственно, 2 вопроса:
1) как вырубить в g++ /usr/local/include
2) как с такой радостью политкорректно бороться с точки зрения дистрибутива и общеюниксовой культуры?

курение манов пока эффекта на дало.

Ответ на: комментарий от UVV

>Это коммерческий продукт, необновлявшийся несколько лет.

а как я ещё буду собирать дельфёвые проги?

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

>а как я ещё буду собирать дельфёвые проги?

Даже если ты добьёшься нормальной сборки, то потом у тебя будут страшные траблы с работой это на современных дистрах. Kylix был мёртв и заброшен много лет.

Если очень хочется паскаль, то бери лазарус.

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

>Если очень хочется паскаль, то бери лазарус.

нет. нужен дельфи и именно дельфи. Должен ли я объяснять почему?

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

>нужен дельфи

Прозреваю фиаско. Бери какой-нибудь древний дистр, или не выпендривайся и ставь пирацкую венду.

Davidov ★★★★
()
Ответ на: комментарий от alz-chi

да и мой вопрос не столько по дельфи, сколько по g++.

alz-chi
() автор топика

>как с такой радостью политкорректно бороться

Можешь ещё попробовать погуглить на тему kylix + название/версия дистра, но с проектом тебе всё равно придётся таскать старую либси и кучу хлама.

В древнем дистре ты, хотя бы, сможешь откомпилировать с меньшим количеством проблем, а потом уже будешь думать, как это всё запустить в нужном дистре.

Davidov ★★★★
()
Ответ на: комментарий от alz-chi

> а как я ещё буду собирать дельфёвые проги?
freepascal + lazarus, как уже посоветовали. Но портировать всё равно придётся, с полпинка не запустится.
P.S.: Не хочешь дельфёвые проги запускать ты %)

UVV ★★★★★
()

>g++ solution.cpp

ЭЭЭэээ.... а как это с делфи коррелирует?

ps: на делфях писал последний раз 7 лет назад, акромя *.pas файлов не помню ничего про cpp. Оно там разве е?

Deleted
()
Ответ на: комментарий от UVV

>Давай

хорошо. у меня есть до 2000 исходников в день на дельфи, которые нужно собирать и запускать. Я не готов править каждый из исходников даже в автоматическом режиме под лазарус/фпц/гпц. Вариант делать всё это под виндой тоже не катит, так как сразу возникают проблемы с безопасностью этого процесса, необходимости делать то же самое и параллельно для g++ gcc python java perl ...., да и тестирующая система не работает под виндой.

я ответил на вопрос?

Есть удачный опыт пихания куликса в что-нибудь типа /opt/gopa/kylix/, но есть ли возможность это сделать как-то по-человечески?

alz-chi
() автор топика
Ответ на: комментарий от Deleted

>ps: на делфях писал последний раз 7 лет назад, акромя *.pas файлов не помню ничего про cpp. Оно там разве е?

да вроде можно встраивать в дельфи сишный код. хотя зачем понадобилось переделывать дефолтные хедеры не понимаю.

alz-chi
() автор топика
Ответ на: комментарий от UVV

куликс в /usr/local/include кладёт свои хедеры. в частности stdarg.h stdlib.h string.h итд

alz-chi
() автор топика
Ответ на: комментарий от st0ke

>ищи там CPATH, CPLUS_INCLUDE_PATH и переопределяй перед запуском g++

они добавляют к дефолтным директориям новые, а задача как раз обратная --- выкинуть лишние. 

CPATH=/nonexistant CPLUS_INCLUDE_PATH=/nonexistant g++ -v luzin2.cpp
<...>
ignoring nonexistent directory "/nonexistant"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.3
 /usr/include/c++/4.3/i486-linux-gnu
 /usr/include/c++/4.3/backward
 /usr/local/include
 /usr/lib/gcc/i486-linux-gnu/4.3.2/include
 /usr/lib/gcc/i486-linux-gnu/4.3.2/include-fixed
 /usr/include

собственно, как обойти это?

alz-chi
() автор топика
Ответ на: комментарий от kemm

>-nostdinc/-nostdinc++

О, да, точно. затерялись они в мане. Спасибо. так всё работает.

куликс видимо проще подвинуть из /usr/local, займусь на досуге.

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

>у меня есть до 2000 исходников в день на дельфи, которые нужно собирать и запускать.

это ж что у тебя за работа такая? специалист по эксгумации?

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

олимпиады провожу дестские по информатике. можете порешать:

таймлимит 3 секунды лимит памяти 64 мегабайта

Очень известный автор не менее известной книги решил написать продолжение своего произведения. Он писал все свои книги на компьютере, подключенном к интернету. Из-за такой неосторожности мальчику Ненокку удалось получить доступ к еще ненаписанной книге. Каждый вечер мальчик залазил на компьютер писателя и записывал на свой компьютер новые записи. Ненокку, записав на свой компьютер очередную главу, заинтересовался, а использовал ли хоть раз писатель слово ``книга''. Но он не любит читать книги (он лучше полазает в интернете), и поэтому он просит вас узнать есть ли то или иное слово в тексте произведения. Но естественно его интересует не только одно слово, а достаточно много.

\InputFile

В каждой строчке входного файла записано одна из двух записей.

? <слово> (<слово> - это набор не более 50 латинских символов);

A <текст> (<текст> - это набор не более $10^5$ латинских символов).

1 означает просьбу проверить существование подстроки <слово> в произведение.

2 означает добавление в произведение <текст>.

Писатель только начал работать над произведением, поэтому он не мог написать более 10^5 символов. А входной файл содержит не более 15 мегабайт информации.

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

поэтому мне и важен куликс с его багами и фичами. известно, что bpc читал быстрее fpc. А на олимпиаде у участникавсё проходит, а на сервере падает.

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

> а как я ещё буду собирать дельфёвые проги?

Никак. Либо лазарус, либо Windows. Под Kylix не было большинства компонентов из Delphi, там они как-то делились и по-разному назывались(кросс-платформенные и для Delphi).

phasma ★☆
()
Ответ на: комментарий от alz-chi

зачем давать школьникам на олимпиадах дельфи? freepascal там давно стандарт, хотя на ioi помню на машинах и лазарус стоял. и зачем гонять руками? простейший тест-сервер делается и поднимается за день-два.

shuthdar ★★★
()
Ответ на: комментарий от alz-chi

>Я не готов править каждый из исходников даже в автоматическом режиме под лазарус/фпц/гпц.

Емнип, Kylix и Delphi не 100% совместимы, править всё равно нужно.

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

60-80% российских школьников пишут на дельфи. Из тех школьников, кто катается на всерос, а про региональные и окрыжные я и не говорю.

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

какая принципиальная разница писать им на дельфи или на любой другой реализации паскаля? им что, формочки нужны? операции ввода-вывода одинаковые полюбому, а различие инструментов у школьников и у проверяющего даёт лишнюю возможность оспаривать проверки на время/память (мало ли как там компиляторы различаются).

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

>какая принципиальная разница писать им на дельфи или на любой другой реализации паскаля?

огромная. fpc integer 16 бит, dcc 32 бита. в dcc есть бесконечные строчки. и.т.д. Потом, я умел под себя настраивать борланд паскаль за 2 минуты с учётом написания темплейтов, именно поэтому я очень долго не мог перелезть на дельфи. А на туре важны минуты, которые некогда тратить на секс и идешкой.

Формочки не нужны, поэтому различия между куликсом и дельфи миннимальны и пока проблем не было замечено.

В конце концов в дельфи есть нормальный дебаггер.

alz-chi
() автор топика
Ответ на: комментарий от shuthdar

var a,b: integer;


Begin
  a:=0; b:=1;
  while b > a do
  Begin
    Inc(a); Inc(b);
  End;
  writeln(a,' ', b);
End.

user@host:dir$ fpc a.pas
Free Pascal Compiler version 2.2.2 [2008/07/30] for i386
Copyright (c) 1993-2008 by Florian Klaempfl
Target OS: Linux for i386
Compiling a.pas
Linking a
11 lines compiled, 0.0 sec

user@host:dir$ ./a
32767 -32768

и я клал на фпц вики

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

>можете порешать: ...

обрабатываем файл в два прохода

1-й проход - считываем все строки начинающиеся с ? и запихиваем их в отсортированный массив, сохранив отдельно индексы начала каждой буквы в этом массиве (это если не заморачиваться, если заморачиваться - эффективнее организовать набор деревьев для слов, начинающихся на каждую букву) -- O(n*log(n))

2-й проход - читаем по очереди все А, проверяя совпадения слов - O(n)

код нет времени писать. для объёмов данных из задачи 3 секунды - слишком много, тут и квадратичного алгоритма хватит :)

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

давай прикинем. текст 10^5 символов. 15Мбайт запросов по 50 символов в каждом. итого 

>>> 15000 * ( 15 * 10**6 /50)
4 500 000 000L

действий. 

в 3 секунды не влезет никак, особенно, если будешь 2 раза файло читать.

alz-chi
() автор топика
Ответ на: комментарий от shuthdar

хз. просто поставил пакетики из старого дебиана.

-So в fpc.cfg закомменчен. сейчас поповыряю конфиг и ман.

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

время от конфигурации зависит конечно, но - влезет. читать файл можно и один раз, но алгоритм в итоге всё равно будет двухпроходным. давай вечерком после работы напишу на С и дам тебе прогнать ваши тесты? :)

shuthdar ★★★
()
Ответ на: комментарий от alz-chi

>давай прикинем. текст 10^5 символов. 15Мбайт запросов по 50 символов в каждом. итого

стоп-стоп... откуда 15 мбайт запросов по 50 символов? по условию - общий размер входного файла до 15 мбайт ;) и откуда 10^6 взялось? чё-то у тебя там не то :)

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

Писатель только начал работать над произведением, поэтому он не мог написать более 10^5 символов. А входной файл содержит не более 15 мегабайт информации.

внимательно читаем условие. Тесты сделаны специально так, чтобы твой солюшн не прходил. Задача имеет напорядок лучшее время решения.

посморел детские решения. проходят за 2.1 сек и умещаются в 190 строк. ^_^

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

>Тесты сделаны специально так, чтобы твой солюшн не прходил. Задача имеет напорядок лучшее время решения.

значит надо ещё подумать, но не сейчас :)

>А входной файл содержит не более 15 мегабайт информации.

Значит надо точнее описывать условие. Входной файл, содержащий 15 мб информации - это файл, размером 15 мб ;)

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

>Значит надо точнее описывать условие. Входной файл, содержащий 15 мб информации - это файл, размером 15 мб ;)

ну мы поняли друг друга? давай не будем обсуждать литературный талант препов. в 6 утра с этим обычно плохо. ^_^

alz-chi
() автор топика
Ответ на: комментарий от shuthdar

>давай вечерком после работы напишу на С и дам тебе прогнать ваши тесты? :)

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

ещё, давай уйдём отсуда, чтобы не оффтопить. моя почта/джаббер "alximik43" [at] "gmail" [точка] "com"

alz-chi
() автор топика
Ответ на: комментарий от alz-chi

> "Каждый вечер мальчик _залазил_ на компьютер писателя и..."


мда, всегда удивляло, что за роботы составляют задачи по программированию... мало того что текст на "олбанском", так ещё и задача сформулирована так, что допускает различные трактовки. К тому же, не специфицирован "вывод" программы. Как при такой постановке задачи Вы ещё и пытаетесь автоматизировать проверку решений????

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

>Вы ещё и пытаетесь автоматизировать проверку решений????

попробуй привести 2 трактовки различных.

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

alz-chi
() автор топика

wine + delphi?

Только не надо сразу говорить "нет", для начала просто попробуйте запустить компилятор и скомпилированные программы, замерить какое падение производительности даёт wine (если даёт вообще).

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