Предлагаю обуждать поддержку и
развитие библиотеки Arageli в
операционной среде Linux.
Для начала хотелось бы знать сколько
человек заинтересовано в проведении
работы в этом направлении (назовитесь,
если таковые есть).
На данный момент появились некоторые
замечания по компиляции библиотеки.
Кто-нибудь из разработчиков имеет опыт
создания серьёзных проектов в Linux?
Алексей.
Где-то год назад, я регулярно
компилировал Arageli на Itanium 2 под Linux ---
тогда всё компилировалось. Было бы
здорово если бы и сейчас в любой Linux
системе Arageli компилировалась бы без
проблеме, но...
Но, библиотека-то компилируется, и
компилируются tests, но не все из них
проходят (FAILED). Достаточно большая
часть не проходит из-за пока
непонятных различий в стандартной
библиотеке. Просто у разработчиков ни
как не доходят руки до того, что бы
заняться Arageli под Linux всерьёз, ибо
большинство из них постоянно работает
под Windows.
Вообще, это уже вторая попытка послать
сюда что-нибудь. Вчера у Гугл Групс
что-то изломалось и сообщения доходили
с огромной задержкой, а некоторые
вообще не дошли. Если когда-нибудь
позже придёт и первое сообщение, то не
ругайте меня, не виноватый я :)
Не густо :-).
Ладно, придётся разбираться самим.
Давайте решать конкретные проблемы и
обсуждать их здесь, тогда люди
заинтересуются и начнут обсуждать их с
нами.
Например, я знаю, что ты, Алексей,
написал новый Makefile для Arageli и он
безусловно лучше, чем существующее
решение. Но, ты его не выкладываешь,
чего-то ждёшь... Знаю, так же, что Сергей
Галкин, может нам помочь с configure и
прочими вещами, т.е. надо бы
скооперироваться. Это что касается
сборки.
Что же касается корректного
прохождения тестов, то это надо
смотреть более подробно. Многие тесты
не проходят из-за различий в std::numeric_limits
для встроенных типов (при конвертации
в или из big_int).
Max
P.S. Я не разработчик, и опыта создания
серьёзных проектов у меня нет
(баловство типа ggnfs не в счёт). Но на C/C++
пишу много по научной работе
(естественно под линуксом).
> Что конкретно требуется?
Для начала было бы неплохо просто
попробовать скомпилировать
библиотеку на х86 и х86_64 системах под
имеющимися ОС-ми. Есть сомнения в том,
что попытка увенчается успехом
(особенно на х86_64).
Задача №2 - прогнать тесты для
библиотеки. Тут по-моему всё ещё
печальнее...
> P.S. Я не разработчик, и опыта создания
> серьёзных проектов у меня нет
> (баловство типа ggnfs не в счёт). Но на C/C++
> пишу много по научной работе
> (естественно под линуксом).
Меня в этом отношении интересует вот
какой момент. Вам скорее всего
приходилось писать код в нескольких
файлах (весь код писать в одном файле
достаточно утомительно). Так вот, меня
в частности интересует ваш опыт в
написании makefile для подобных проектов.
В особенности, если файлы были
разнесены по разным каталогам.
Алексей.
OK. Попробую и доложу о результатах.
...
> Так вот, меня
> в частности интересует ваш опыт в
> написании makefile для подобных проектов.
> В особенности, если файлы были
> разнесены по разным каталогам.
Посмотрите для примера как сделаны
Makefile'ы (их там несколько - по одному на
каждый каталог) и как они вызываются из
главного Makefile в ggnfs:
http://sf.net/projects/ggnfs
Max
> > Что конкретно требуется?
> Для начала было бы неплохо просто
> попробовать скомпилировать
> библиотеку на х86 и х86_64 системах под
> имеющимися ОС-ми. Есть сомнения в том,
> что попытка увенчается успехом
> (особенно на х86_64).
Лог сборки libarageli.a из arageli-2.2.2.207-svn.zip под
x86_64 приведен ниже. В целом неплохо и
даже собралось, но вот все warning лучше
пофиксить. Особые подозрения вызывают
странные преобразования типов: converting to
'size_t' from 'long double'
А вот с 'make tests' все совсем плохо: мало
того, что там ошибки вылезают, так сама
сборка в ко всему прочему просто
зацикливается.
Вот вспомню свой пароль к svn - попробую
зафиксить критические ошибки. ;)
Max
=== log сборки ===
build/linux-gcc$ make
cd ../../bin && mkdir -p arageli_Inters
cd ../../bin/arageli_Inters && g++ -c -DARAGELI_SOURCE
../../src/arageli/algebrslt.cpp ../../src/arageli/bareiss.cpp
../../src/arageli/bigar.cpp ../../src/arageli/big_const.cpp
../../src/arageli/big_float.cpp ../../src/arageli/big_int.cpp
../../src/arageli/cone.cpp ../../src/arageli/exception.cpp
../../src/arageli/gauss.cpp ../../src/arageli/gcd.cpp
../../src/arageli/hermite.cpp ../../src/arageli/intalg.cpp
../../src/arageli/intconvex.cpp ../../src/arageli/intcount_barvinok.cpp
../../src/arageli/io.cpp ../../src/arageli/linopt.cpp
../../src/arageli/lll.cpp ../../src/arageli/logarithm.cpp
../../src/arageli/matrix.cpp ../../src/arageli/motzkin_burger.cpp
../../src/arageli/polyhedron.cpp ../../src/arageli/polynom.cpp
../../src/arageli/powerest.cpp ../../src/arageli/prime.cpp
../../src/arageli/rational.cpp ../../src/arageli/resultant.cpp
../../src/arageli/sideset.cpp ../../src/arageli/smith.cpp
../../src/arageli/smithpoly.cpp ../../src/arageli/solve_linsys.cpp
../../src/arageli/sparse_polynom.cpp ../../src/arageli/sturm.cpp
../../src/arageli/texout.cpp ../../src/arageli/triangulation.cpp
../../src/arageli/type_opers.cpp ../../src/arageli/type_traits.cpp
../../src/arageli/_utility.cpp ../../src/arageli/vecalg.cpp
../../src/arageli/vector.cpp ../../src/arageli/hermite/classic.cpp
../../src/arageli/hermite/domich.cpp
../../src/arageli/hermite/hafner.cpp
../../src/arageli/hermite/storjohann.cpp
../../src/arageli/smith/classic.cpp
../../src/arageli/smith/near_optimal.cpp
../../src/arageli/smith/storjohann.cpp
../../src/arageli/bigar.cpp: In function 'size_t
Arageli::_Internal::do_big_int_to_bdn(Arageli::_Internal::digit*,
Arageli::_Internal::digit*, size_t, Arageli::_Internal::digit)':
../../src/arageli/bigar.cpp:55: warning: comparison is always true due
to limited range of data type
../../src/arageli/bigar.cpp: In function 'size_t
Arageli::_Internal::do_bdn_to_big_int(Arageli::_Internal::digit*,
Arageli::_Internal::digit*, size_t, Arageli::_Internal::digit)':
../../src/arageli/bigar.cpp:91: warning: comparison is always true due
to limited range of data type
In file included from ../../src/arageli/big_const.cpp:24:
../../src/arageli/big_const.hpp:114:8: warning: no newline at end of
file
../../src/arageli/big_const.cpp: In function 'Arageli::big_int
Arageli::ln1_25(size_t)':
../../src/arageli/big_const.cpp:38: warning: converting to 'size_t'
from 'long double'
../../src/arageli/big_const.cpp: In function 'Arageli::big_int
Arageli::ln2(size_t)':
../../src/arageli/big_const.cpp:72: warning: converting to 'size_t'
from 'long double'
../../src/arageli/big_const.cpp: In function 'Arageli::big_int
Arageli::exp(Arageli::big_int, size_t, int)':
../../src/arageli/big_const.cpp:162: warning: converting to 'size_t'
from 'long double'
../../src/arageli/big_const.cpp: In function 'Arageli::big_int
Arageli::e(size_t)':
../../src/arageli/big_const.cpp:233: warning: converting to 'size_t'
from 'long double'
../../src/arageli/big_float.cpp: In constructor
'Arageli::big_float::big_float(const char*)':
../../src/arageli/big_float.cpp:265: warning: converting to 'long int'
from 'long double'
../../src/arageli/big_float.cpp: In function 'Arageli::big_float
Arageli::nfsqrt(const Arageli::big_float&, long int, int)':
../../src/arageli/big_float.cpp:1214: warning: converting to 'size_t'
from 'long double'
In file included from ../../src/arageli/logarithm.cpp:24:
../../src/arageli/big_const.hpp:114:8: warning: no newline at end of
file
../../src/arageli/logarithm.cpp:283:9: warning: no newline at end of
file
../../src/arageli/logarithm.cpp: In function 'Arageli::big_int
Arageli::frac_1(const Arageli::big_int&, size_t)':
../../src/arageli/logarithm.cpp:194: warning: converting to 'size_t'
from 'long double'
cd ../../bin/arageli_Inters && ar -r ../libarageli.a *.o
ar: creating ../libarageli.a
=== log сборки ===
By default, the Make rules should compile and link with '-g', so
that executable programs have debugging symbols (например, в
GNU Coding Standards).
Так вот... как поступить относительно
библиотеки Arageli? Насколько я знаю
сейчас по умолчанию библиотека
компилируется без этого ключа (under Linux).
Что думает сообщество?
Если со вторым случаем всё достаточно
очевидно (это опция будет полезной).
А вот в первом не достаточно понятно,
для чего человеку, который возможно
никогда не полезет в код библиотеки
эта опция?
Я не уверен, но, по-моему
производительность библиотеки с
опцией -g будет ниже, чем без неё.
Насколько я понимаю, на данный момент в
основном библиотекой пользуются её
разработчики. Возможно при таком
положении дел, имеет смысл включить
данную опцию, но только как временное
решение (на мой взгляд, не очень
удачное).
Естесственно, что при отладке эта
опция нужна, но нужна ли отладка по
умолчанию?