xzvf 0 Posted 2007-09-03 10:13:59 Share Posted 2007-09-03 10:13:59 Файл install_binстрока 25 вместо: install -m $bin_mode -o $owner ./$mod $prefix/usr/lib/stg/`basename $lib` надо: install -m $bin_mode -o $owner ./$lib $prefix/usr/lib/stg/`basename $lib` Log: 2007-09-03 13:09:46 -- Stg v. Stg 2.403b 2007-09-03 13:09:46 -- Message queue created successfully. msgKey=5555 msgID=196608 2007-09-03 13:09:46 -- Timer thread started successfully. 2007-09-03 13:09:46 -- Storage plugin loading failed: Shared object "libconffiles.so" not found, required by "mod_store_files.so" 2007-09-03 13:09:46 -- Load StoragePlugin error. 2007-09-03 13:09:47 -- Queue removed successfully. 2007-09-03 13:09:47 -- StgTimer: Stop successfull. 2007-09-03 13:09:47 -- Stg stopped successfully. Link to post Share on other sites
Alferov 0 Posted 2007-09-03 10:21:02 Share Posted 2007-09-03 10:21:02 либо ldconfig -R /usr/lib/stg либо скопируй либы из ../lib (в дистривутиве) в /usr/lib Link to post Share on other sites
xzvf 0 Posted 2007-09-03 10:25:37 Share Posted 2007-09-03 10:25:37 либо ldconfig -R /usr/lib/stg либо скопируй либы из ../lib (в дистривутиве) в /usr/lib Spasibo. vsjo OK. Link to post Share on other sites
Ork Yason 8 Posted 2007-09-04 12:01:08 Share Posted 2007-09-04 12:01:08 господа, подскажите, как айпи-адреса представлены в базе ФБ а точнее где лежит функция которая конвертирует стринговый айпи -в целое число Link to post Share on other sites
Genius 0 Posted 2007-09-04 15:46:01 Share Posted 2007-09-04 15:46:01 Ip адреса представлены в стандартном int отображении, самый просто способ перевода из строки в него inet_addr (). Новая ошибка в модуле ФБ: Если в базе есть пользователи, которым должен быть сменен тариф в начале следущего учетного периода то stg не запустится с ошибкой: *** IBPP::WrongType *** Context: RowImpl::GetValue Message: Incompatible types. INTEGER and std::string user.cpp > 18:48:25 > Cannot read conf for user test. user.cpp > 18:48:25 > Error connecting database! Суть ошибки в опечатке: { strError = "Error making query: \"" + query + "\""; db.Rollback(); return -1; } if (db.Fetch(trow)) { [color=red]t[/color]row->Get(1, conf->nextTariff); } else { strError = "User \"" + login + "\" has a nonexistent next tariff!"; db.Rollback(); Аналогичная ошибка с будущими корпорациями, но пока она ни на что не влияет, но лучше заметить ее сейчас: { strError = "Error making query: \"" + query + "\""; db.Rollback(); return -1; } if (db.Fetch(trow)) { [color=red]t[/color]row->Get(1, conf->corp); } else { strError = "User \"" + login + "\" has a nonexistent corporation!"; db.Rollback(); Link to post Share on other sites
Necromant 0 Posted 2007-09-08 20:49:29 Share Posted 2007-09-08 20:49:29 Проблемы со сборкой sgauth (stg 2.4 -2007 last freeBSD 6.2 gmake 3.81 amd64) ... g++ -g3 -Wall -fPIC -I ../../include/ -I ./ -DFREE_BSD5 -c ia_auth_c.cpp g++ -shared -Wl,-soname,libia_auth_c.so ia_auth_c.o -o libia_auth_c.so ar rc libia_auth_c.a ia_auth_c.o ranlib libia_auth_c.a cp ia_auth_c.h ../../include/ cp libia_auth_c.a ../../lib/ cp libia_auth_c.so ../../lib/ g++ -c main.cpp -g3 -Wall -I ../../include -DFREE_BSD5 g++ -c web.cpp -g3 -Wall -I ../../include -DFREE_BSD5 gmake: *** Нет правила для сборки цели `../../lib/libcrypto.a', требуемой для `sgauth'. Останов. Проблемы со сборкой sgconf (stg 2.4 -2007 last freeBSD 6.2 gmake 3.81 amd64) ... ranlib libsrvconf.a cp servconf.h netunit.h list.h ../../include/ cp libsrvconf.a ../../lib/ cp libsrvconf.so ../../lib/ Makefile:68: deps: No such file or directory g++ -c main.cpp -g3 -Wall -I ../../include -DFREE_BSD5 g++ -c parser.cpp -g3 -Wall -I ../../include -DFREE_BSD5 gmake: *** Нет правила для сборки цели `-lgnugetopt', требуемой для `sgconf'. Останов. Link to post Share on other sites
Drool 0 Posted 2007-09-11 20:30:39 Share Posted 2007-09-11 20:30:39 gmake: *** Нет правила для сборки цели `../../lib/libcrypto.a', требуемой для `sgauth'. Останов.gmake: *** Нет правила для сборки цели `-lgnugetopt', требуемой для `sgconf'. Останов. А если найти и заменить libcrypto.a на libcrypto.so ? Автор почему-то сильно любит линковать софину динамикой вперемешку со статикой... Никак не пойму этого магического финта и что он дает :-) -lgnugetopt - попробовать найти какой devel-пакет предоставляет это дело и доустановить. P.S. А на этой же системе, только под x86_32 собирается? Если да - тады начинается именно то веселье относительно гвоздей для 64-битной сборки, о которой я говорил несколько выше. :argh: Link to post Share on other sites
Genius 0 Posted 2007-09-13 16:42:36 Share Posted 2007-09-13 16:42:36 Обнаружил еще один неожиданный баг: Иногда (пока не нашел после какого события) поля userdata меняются местами, у меня в поле userdata0 храниься MAC пользователя, так вот сегодня обнаружил его у некоторых пользователей в userdata5 и в userdata9 и еще в каких-то, ручное такое распределение невозможно, в логах таких изменений нет. Постараюсь сам поискать причину, но думаю что где-то в модуле FB ошибка. Link to post Share on other sites
madf 279 Posted 2007-09-14 11:16:49 Share Posted 2007-09-14 11:16:49 g++ admin.o admins.o main.o curr_ip.o settings.o stg_timer.o tariff2.o traffcounter.o user.o user_property.o users.o plugin_runner.o ../../lib/libconffiles.so ../../lib/libstg_common.so ../../lib/libstg_crypto.so ../../lib/libstg_logger.so ../../lib/libdotconfpp.so ../../lib/libscript_executer.so ../../lib/libstg_pinger.so /usr/lib/libexpat.so /usr/lib/libpthread.so /usr/lib/libdl.so -g3 -Wl,-E -L../../lib -Wl,-rpath,../../lib -Wl,-rpath,/usr/lib/stg -o stargazer Кстати, без крупнозернистого рашпиля и тяжелой кувалды старгайзер не соберется на линухе x86_64, в котором нет биарча (ALT относится именно к таким) именно из-за гвоздей-сотки в виде явкого указания /lib или /usr/lib На самом деле, если взглянуть на Makefile, который лежит в projects/stargazer, все внешние библиотеки (вроде expat или pthread) указаны вполне корректно: -lexpat -lpthread К сожалению, под рукой нету машины x86_64 чтобы тестировать на ней сборку и работоспособность, по этому пока нельзя сказать, почему у Вас -lpthread разрешается как /usr/lib/libpthread.so Link to post Share on other sites
madf 279 Posted 2007-09-14 11:30:32 Share Posted 2007-09-14 11:30:32 Не собираеться ( ... g++ admin.o admins.o main.o curr_ip.o settings.o stg_timer.o tariff2.o traffcounter.o user.o user_property.o users.o plugin_runner.o ../../lib/libconffiles.so ../../lib/libstg_common.so ../../lib/libstg_crypto.so ../../lib/libstg_logger.so ../../lib/libdotconfpp.so ../../lib/libscript_executer.so ../../lib/libstg_pinger.so ../../lib/libibpp.so /usr/lib/libfbclient.so /usr/lib/libexpat.so /usr/lib/libpthread.so /usr/lib/libdl.so -g3 -Wl,-E -L../../lib -Wl,-rpath,../../lib -Wl,-rpath,/usr/lib/stg -o stargazer ../../lib/libstg_common.so: undefined reference to `Blowfish_Decrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)' ../../lib/libstg_common.so: undefined reference to `Blowfish_Encrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)' ../../lib/libstg_common.so: undefined reference to `Blowfish_Init(BLOWFISH_CTX*, unsigned char*, int)' ... Лечиться ли это как-то ? спасибо Проблема изучается. Воспроизвести ошибку не удалось, по этому не могу указать точного решения. Попробуйте переставить местами строки -lstg_common и -lstg_crypto в projects/stargazer/Makefile Библиотека libstg_common.so использует функции шифрования из libstg_crypto.so. Однако, на сегодня, библиотеки собираются без указания зависимостей - они разрешаются при линковке сервера. Возможно, для вашей версии компоновщика важен порядок линковки библиотек. Link to post Share on other sites
madf 279 Posted 2007-09-14 11:36:55 Share Posted 2007-09-14 11:36:55 Отчего при сборке с NO_DAEMON все работает, а если без этого нет? Если Вы имеете в виду сообщения вида "Broken pipe!" - то это довольно занятная проблема. Есть подозрение, что это результат работы функции printfd, которая используется для вывода лога в консоль. При работе в режиме дэмона эта функция все равно выводит лог, хотя stdout закрыт. Возможно, при этом происходит переполнение какого-то внутреннего буфера функции printf, что вызывает сигнал обрыв сокета связи с БД и, как следствие - SIG_PIPE. Как вариант - попробуйте закомментировать код этой функции (он находится в файле stglibs/common.lib/common.cpp). Link to post Share on other sites
madf 279 Posted 2007-09-14 11:47:00 Share Posted 2007-09-14 11:47:00 FreeBSD 5.4Скомпилилось нормально, без ошибок. При запуске выдает Starting stargazer. /libexec/ld-elf.so.1: /usr/sbin/stargazer: Undefined symbol "_ZN15DOTCONFDocumentC1ENS_13CaseSensitiveE" и все... не запускается. Этот символ должен быть определен в libdotconfpp.so. Проверял на FreeBSD 5.3 - не смог вызвать повторение ошибки. Если Вас не затруднит - предоставьте лог компиляции по адресу faust@stg.dp.ua Link to post Share on other sites
madf 279 Posted 2007-09-14 11:50:00 Share Posted 2007-09-14 11:50:00 что-то я не помню, чтобы Борис говорил про ФБ не ниже 2?! она 2 и 2.0.1 и есть... _ДОЛЖЕН_ работать и на ветке 1.5 Вкусностей версии 2 не использовалось, хоть и очень хотелось Link to post Share on other sites
Drool 0 Posted 2007-09-14 16:51:56 Share Posted 2007-09-14 16:51:56 Не собираеться ( ... g++ admin.o admins.o main.o curr_ip.o settings.o stg_timer.o tariff2.o traffcounter.o user.o user_property.o users.o plugin_runner.o ../../lib/libconffiles.so ../../lib/libstg_common.so ../../lib/libstg_crypto.so ../../lib/libstg_logger.so ../../lib/libdotconfpp.so ../../lib/libscript_executer.so ../../lib/libstg_pinger.so ../../lib/libibpp.so /usr/lib/libfbclient.so /usr/lib/libexpat.so /usr/lib/libpthread.so /usr/lib/libdl.so -g3 -Wl,-E -L../../lib -Wl,-rpath,../../lib -Wl,-rpath,/usr/lib/stg -o stargazer ../../lib/libstg_common.so: undefined reference to `Blowfish_Decrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)' ../../lib/libstg_common.so: undefined reference to `Blowfish_Encrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)' ../../lib/libstg_common.so: undefined reference to `Blowfish_Init(BLOWFISH_CTX*, unsigned char*, int)' ... Лечиться ли это как-то ? спасибо Проблема изучается. Воспроизвести ошибку не удалось, по этому не могу указать точного решения. Попробуйте переставить местами строки -lstg_common и -lstg_crypto в projects/stargazer/Makefile Библиотека libstg_common.so использует функции шифрования из libstg_crypto.so. Однако, на сегодня, библиотеки собираются без указания зависимостей - они разрешаются при линковке сервера. Возможно, для вашей версии компоновщика важен порядок линковки библиотек. > Попробуйте переставить местами строки -lstg_common и -lstg_crypto в projects/stargazer/Makefile Попробовал. Побоку, та же фигня :-( Проблема явно в --as-needed http://www.freesource.info/wiki/AltLinux/S...earch=as-needed Но не могу понять где собака порылась... Link to post Share on other sites
Drool 0 Posted 2007-09-14 18:17:01 Share Posted 2007-09-14 18:17:01 ../../lib/libstg_common.so: undefined reference to `Blowfish_Decrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)'../../lib/libstg_common.so: undefined reference to `Blowfish_Encrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)' ../../lib/libstg_common.so: undefined reference to `Blowfish_Init(BLOWFISH_CTX*, unsigned char*, int)' Проблема изучается. Воспроизвести ошибку не удалось, по этому не могу указать точного решения. Попробуйте переставить местами строки -lstg_common и -lstg_crypto в projects/stargazer/Makefile Библиотека libstg_common.so использует функции шифрования из libstg_crypto.so. Однако, на сегодня, библиотеки собираются без указания зависимостей - они разрешаются при линковке сервера. Возможно, для вашей версии компоновщика важен порядок линковки библиотек. При сборке наблюдаю такое: g++ -shared -Wl,-soname,libstg_common.so debug.o stg_error.o common.o stg_strptime.o -o libstg_common.so Не может ли быть грабля зарыта здесь? Я среди *.o не вижу blowfish.o. Link to post Share on other sites
madf 279 Posted 2007-09-14 18:58:05 Share Posted 2007-09-14 18:58:05 При сборке наблюдаю такое:g++ -shared -Wl,-soname,libstg_common.so debug.o stg_error.o common.o stg_strptime.o -o libstg_common.so Не может ли быть грабля зарыта здесь? Я среди *.o не вижу blowfish.o. Его там и не должно быть. Шифрование BlowFish - это часть библиотеки libstg_crypto.so Избыточной линковки тут тоже нет, т.к. при сборке библиотек зависимости не учитываются, а разрешаются именно при сборке сервера. Возможно, в этом проблема. Link to post Share on other sites
Drool 0 Posted 2007-09-14 19:51:02 Share Posted 2007-09-14 19:51:02 При сборке наблюдаю такое:g++ -shared -Wl,-soname,libstg_common.so debug.o stg_error.o common.o stg_strptime.o -o libstg_common.so Не может ли быть грабля зарыта здесь? Я среди *.o не вижу blowfish.o. Привожу ниже патч, с которым собирается, хоть и с диким количеством ругани: =========тело патча============ --- stg-2.4-2007.06.26-14.14.41/stglibs/Makefile.in.orig 2007-05-11 17:37:12 +0400 +++ stg-2.4-2007.06.26-14.14.41/stglibs/Makefile.in 2007-09-14 23:32:29 +0400 @@ -68,7 +68,7 @@ endif all: $(PROG) $(PROG): $(OBJS) - g++ -shared -Wl,-soname,$(PROG).so $(OBJS) -o $(PROG).so + g++ -g3 -Wall -fPIC $(OBJS) $(FIX) -Wl,-soname,$(PROG).so -o $(PROG).so ar rc $(PROG).a $(OBJS) ranlib $(PROG).a --- stg-2.4-2007.06.26-14.14.41/stglibs/common.lib/Makefile.orig 2007-05-17 12:43:00 +0400 +++ stg-2.4-2007.06.26-14.14.41/stglibs/common.lib/Makefile 2007-09-14 23:31:49 +0400 @@ -4,6 +4,7 @@ LIB_NAME = stg_common PROG = lib$(LIB_NAME) +FIX = ../crypto.lib/blowfish.o SRCS = debug.c \ stg_error.c \ =========конец патча============ Ругань примерно такого содержания: ============================= verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK5ADMIN7GetPrivEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _Z8Encode12PcPKci verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK4USER12GetConnectedEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK4USER11GetPingTimeEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK7TARIFFS13GetTariffsNumEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN5USERS10GetUserNumEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK8SETTINGS9GetDayFeeEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK8SETTINGS10GetDirNameEi verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _Z12strtodouble2PKcRd verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN4USER9WriteConfEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN4USER9WriteStatEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK7TARIFFS10FindByNameERKSs verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN4USER15ResetNextTariffEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK5ADMIN9GetLogStrEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK5ADMIN10GetAdminIPEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK8SETTINGS10GetConfDirEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _Z10ScriptExecRKSs verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK5ADMIN13GetAdminIPStrEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN7TARIFFS3DelERKSsRK5ADMIN verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK7TARIFFS11GetStrErrorEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN7TARIFFS3AddERKSsRK5ADMIN verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN6TARIFFC1Ev verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _Z18ParseTariffTimeStrPKcRiS1_S1_S1_ verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN7TARIFFS10OpenSearchEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN7TARIFFS10SearchNextEiP11TARIFF_DATA verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN7TARIFFS11CloseSearchEi verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN7TARIFFS3ChgERK11TARIFF_DATARK5ADMIN verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN6ADMINS3AddERKSsRK5ADMIN verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN6ADMINS11GetStrErrorEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN6ADMINS3DelERKSsRK5ADMIN verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZN6ADMINS6ChangeERK10ADMIN_CONFRK5ADMIN verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK6ADMINS10OpenSearchEv verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK6ADMINS10SearchNextEiP10ADMIN_CONF verify-elf: WARNING: ./usr/lib/stg/mod_conf_sg.so: undefined symbol: _ZNK6ADMINS11CloseSearchEi verify-elf: WARNING: ./usr/lib/stg/mod_remote_script.so: TEXTREL entry found: 0x0 ============================= Этой ругани экранов с десяток... На x86_64 сборка не идет вообще: ============================= Makeing stg_logger.lib gmake: Entering directory `/usr/src/RPM/BUILD/stg-2.4-2007.06.26-14.14.41/stglibs/stg_logger.lib' rm -f deps libstg_logger *.o *.a *.so tags *.*~ gmake: Leaving directory `/usr/src/RPM/BUILD/stg-2.4-2007.06.26-14.14.41/stglibs/stg_logger.lib' gmake: Entering directory `/usr/src/RPM/BUILD/stg-2.4-2007.06.26-14.14.41/stglibs/stg_logger.lib' ../Makefile.in:88: deps: No such file or directory gmake: Leaving directory `/usr/src/RPM/BUILD/stg-2.4-2007.06.26-14.14.41/stglibs/stg_logger.lib' gmake: Entering directory `/usr/src/RPM/BUILD/stg-2.4-2007.06.26-14.14.41/stglibs/stg_logger.lib' g++ -pipe -Wall -O2 -I ../../include/ -I ./ -DLINUX -DSTG_TIME -c stg_logger.cpp g++ -shared stg_logger.o -Wl,-soname,libstg_logger.so -o libstg_logger.so /usr/bin/ld: stg_logger.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC stg_logger.o: could not read symbols: Bad value collect2: ld returned 1 exit status ============================= Ы? :argh: Link to post Share on other sites
DoS 0 Posted 2007-09-15 04:49:01 Share Posted 2007-09-15 04:49:01 FreeBSD 5.4Скомпилилось нормально, без ошибок. При запуске выдает Starting stargazer. /libexec/ld-elf.so.1: /usr/sbin/stargazer: Undefined symbol "_ZN15DOTCONFDocumentC1ENS_13CaseSensitiveE" и все... не запускается. Этот символ должен быть определен в libdotconfpp.so. Проверял на FreeBSD 5.3 - не смог вызвать повторение ошибки. Если Вас не затруднит - предоставьте лог компиляции по адресу faust@stg.dp.ua точно такая же ошибка выходит и на: - Gentoo 2007.0 - FreeBSD 6.2 Link to post Share on other sites
Alferov 0 Posted 2007-09-15 05:21:35 Share Posted 2007-09-15 05:21:35 Starting stargazer. /libexec/ld-elf.so.1: /usr/sbin/stargazer: Undefined symbol "_ZN15DOTCONFDocumentC1ENS_13CaseSensitiveE" Эта проблема решена. Вот здесь: http://local.com.ua/forum/index.php?showto...indpost&p=66146 Осталось научить эту сборку работать в режиме демона. Link to post Share on other sites
madf 279 Posted 2007-09-15 08:00:46 Share Posted 2007-09-15 08:00:46 Привожу ниже патч, с которым собирается, хоть и с диким количеством ругани... Это очень ПЛОХОЕ решение Странно что вобще собирается... Link to post Share on other sites
Drool 0 Posted 2007-09-15 10:05:02 Share Posted 2007-09-15 10:05:02 Привожу ниже патч, с которым собирается, хоть и с диким количеством ругани... Это очень ПЛОХОЕ решение Странно что вобще собирается... 1. Обоснуйте чем плохое? 2. Как лучше? Link to post Share on other sites
madf 279 Posted 2007-09-15 13:04:17 Share Posted 2007-09-15 13:04:17 2Drool: Как я уже писал выше, поддержка BlowFish - это задача библиотеки libstg_crypto.so. То есть линковка libstg_common.so с объектником из libstg_crypto.so - это как раз та проблема, которая описана тут: http://www.freesource.info/wiki/AltLinux/S...earch=as-needed Быстрое и простое решение - вынос функций EncodeString и DecodeString в библиотеку linstg_crypto.so. Но при этом останется неизвестной причина, почему компоновщик не видит символов Blowfish_Init, Blowfish_Encrypt и Blowfish_Decrypt, хотя библиотека libstg_crypto.so указана при сборке stargazer. Опять же, не могу повторить эту ошибку ни на SuSE 10.0, ни на Gentoo 2007 для компиляторов веток 3.* и 4.*. Интересно было бы посмотреть на вывод команды objdump -t libstg_crypto.so | grep Blowfish И еще, совершенно непонятно, откуда у Вас взялась строчка g++ -pipe -Wall -O2 -I ../../include/ -I ./ -DLINUX -DSTG_TIME -c stg_logger.cpp Стандартный Makefile.in должен генерировать такой код: g++ -g3 -Wall -fPIC -I ../../include/ -I ./ -DLINUX -DSTG_TIME -c stg_logger.cpp При сборке Stargazer оптимизация не используется, зато отладочная инормация всегда включается. Там неоткуда было взяться ключу -O2. В то-же время ключ -fPIC совершенно необходим для генерации динамически компонуемых библиотек (указание на генерацию позиционно-независимого кода). Сборка проводилась из "чистых" исходников? Там небыло результатов предыдущих компиляций? Link to post Share on other sites
Drool 0 Posted 2007-09-16 10:45:04 Share Posted 2007-09-16 10:45:04 2Drool:Как я уже писал выше, поддержка BlowFish - это задача библиотеки libstg_crypto.so. То есть линковка libstg_common.so с объектником из libstg_crypto.so - это как раз та проблема, которая описана тут: http://www.freesource.info/wiki/AltLinux/S...earch=as-needed Быстрое и простое решение - вынос функций EncodeString и DecodeString в библиотеку linstg_crypto.so. Но при этом останется неизвестной причина, почему компоновщик не видит символов Blowfish_Init, Blowfish_Encrypt и Blowfish_Decrypt, хотя библиотека libstg_crypto.so указана при сборке stargazer. Опять же, не могу повторить эту ошибку ни на SuSE 10.0, ни на Gentoo 2007 для компиляторов веток 3.* и 4.*. Интересно было бы посмотреть на вывод команды objdump -t libstg_crypto.so | grep Blowfish И еще, совершенно непонятно, откуда у Вас взялась строчка g++ -pipe -Wall -O2 -I ../../include/ -I ./ -DLINUX -DSTG_TIME -c stg_logger.cpp Стандартный Makefile.in должен генерировать такой код: g++ -g3 -Wall -fPIC -I ../../include/ -I ./ -DLINUX -DSTG_TIME -c stg_logger.cpp При сборке Stargazer оптимизация не используется, зато отладочная инормация всегда включается. Там неоткуда было взяться ключу -O2. В то-же время ключ -fPIC совершенно необходим для генерации динамически компонуемых библиотек (указание на генерацию позиционно-независимого кода). Сборка проводилась из "чистых" исходников? Там небыло результатов предыдущих компиляций? Относительно --as-needed - насколько я знаю только ALT организовали это дело на уровне компилятора/rpm-буилдера, слыхал что гентушники наступили на эту граблю, но как они это дело решали для себя - не в курсе. По-моему - так и оставили избыточную линковку. Остальные вроде эту бяку попросту проигнорировали. Относительно ключей компилятора - следов предыдущей сборки нет (при сборке с помощью spec/rpm папка сборки перед сборкой вычищается). В данный момент заливаю собранные под athlon пакеты +src.rpm+build.log на http://fly.osdn.org.ua/~drool/stargazer/ В src.rpm можно найти те мои кривопатчи, с которыми оно собирается, в спеке видны дополнительные финты ушами (subst etc) для выравнивания путей под специфику ALT. Там же можно будет ознакомиться с логом сборки. Сборка ведется всегда внутри хашера (http://www.freesource.info/wiki/ALTLinux/Dokumentacija/Hasher) Link to post Share on other sites
madf 279 Posted 2007-09-16 11:38:39 Share Posted 2007-09-16 11:38:39 2Drool: Так, я думаю, проблема связанная с ../../lib/libstg_common.so: undefined reference to `Blowfish_Decrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)' ../../lib/libstg_common.so: undefined reference to `Blowfish_Encrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)' ../../lib/libstg_common.so: undefined reference to `Blowfish_Init(BLOWFISH_CTX*, unsigned char*, int)' решена. Это либо фича дистрибутива, либо Вашей системы сборки. При компоновке по умолчанию используется ключ --as-needed компоновщика. Ситуация следующая: некоторые библиотеки (в частности, libstg_common.so) используют функции других библиотек (шифрование из libstg_crypto.so для функций EncryptString/DecryptString). При компоновке библиотек не указывается зависимость друг от друга - она разрешается при компоновке сервера. При этом, сам stargazer в явном виде libstg_crypto.so не использует - только в модулях и через функции libstg_common.so. Таким образом, линковка stargazer с libstg_crypto.so является избыточной. Но она необходима для использования libstg_common.so. Выход 1: Использовать ключ --no-as-needed при сборке (-Wl,--no-as-needed для g++) - он должен быть указан ДО списка библиотек Выход 2: Глобально изменить систему сборки библиотек и модулей и указывать в них зависимости от других библиотек через -l<name> С моей точки зрения, второй выход значительно более правильный, но вызывает некоторые затруднения, связанные со спецификой системы каталогов дистрибутива (необходимость копирования библиотек и модулей после компиляции в один каталог). Внятного решения этой проблемы я так и не нашел (столкнулся с ней несколько ранее в процессе перевода системы сборки stg на autotools). PS: ошибку компиляции удалось повторить именно с ключем --as-needed: faust@localhost stargazer $ g++ -Wl,--as-needed admin.o admins.o main.o curr_ip.o settings.o stg_timer.o tariff2.o traffcounter.o user.o user_property.o users.o plugin_runner.o ../../lib/libconffiles.so ../../lib/libstg_crypto.so ../../lib/libstg_common.so ../../lib/libstg_logger.so ../../lib/libdotconfpp.so ../../lib/libscript_executer.so ../../lib/libstg_pinger.so /usr/lib/libexpat.so /usr/lib/libpthread.so /usr/lib/libdl.so -g3 -Wl,-E -L../../lib -Wl,-rpath,../../lib -Wl,-rpath,/usr/lib/stg -o stargazer ../../lib/libstg_common.so: undefined reference to `Blowfish_Init(BLOWFISH_CTX*, unsigned char*, int)' ../../lib/libstg_common.so: undefined reference to `Blowfish_Encrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)' ../../lib/libstg_common.so: undefined reference to `Blowfish_Decrypt(BLOWFISH_CTX*, unsigned int*, unsigned int*)' collect2: выполнение ld завершилось с кодом возврата 1 Link to post Share on other sites
madf 279 Posted 2007-09-16 11:48:20 Share Posted 2007-09-16 11:48:20 2Drool: По поводу логов компиляции. + /usr/bin/subst 's|gmake|gmake CFLAGS="-pipe -Wall -O2 -march=athlon -mtune=athlon-xp"|g' ./build Я так понимаю, эта подстановка - работа автоматизированной системы сборки. Так вот, для библиотек и модулей обязательно нужно указывать -fPIC для генерации позиционно-независимоого кода. Сообщения: /usr/bin/ld: warning: creating a DT_TEXTREL in a shared object. как раз об этом и предупреждают. PS: судя по бинарникам в rpm'ке у вас не пофикшен install_bin. Поправьте как указано тут: http://local.com.ua/forum/index.php?showto...indpost&p=66146 Link to post Share on other sites
Recommended Posts