Jump to content

Новая сборка СТГ 2.4


Recommended Posts

Файл 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
  • Replies 112
  • Created
  • Last Reply

Top Posters In This Topic

господа, подскажите, как айпи-адреса представлены в базе ФБ

а точнее где лежит функция которая конвертирует стринговый айпи -в целое число

Link to post
Share on other sites

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

Проблемы со сборкой 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
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

Обнаружил еще один неожиданный баг:

 

Иногда (пока не нашел после какого события) поля userdata меняются местами, у меня в поле userdata0 храниься MAC пользователя, так вот сегодня обнаружил его у некоторых пользователей в userdata5 и в userdata9 и еще в каких-то, ручное такое распределение невозможно, в логах таких изменений нет.

 

Постараюсь сам поискать причину, но думаю что где-то в модуле FB ошибка.

Link to post
Share on other sites
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
Не собираеться :)(

 

...

 

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
Отчего при сборке с NO_DAEMON все работает, а если без этого нет?

Если Вы имеете в виду сообщения вида "Broken pipe!" - то это довольно занятная проблема. Есть подозрение, что это результат работы функции printfd, которая используется для вывода лога в консоль. При работе в режиме дэмона эта функция все равно выводит лог, хотя stdout закрыт. Возможно, при этом происходит переполнение какого-то внутреннего буфера функции printf, что вызывает сигнал обрыв сокета связи с БД и, как следствие - SIG_PIPE. Как вариант - попробуйте закомментировать код этой функции (он находится в файле stglibs/common.lib/common.cpp).

Link to post
Share on other sites
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
что-то я не помню, чтобы Борис говорил про ФБ не ниже 2?!

 

она 2 и 2.0.1 и есть...

_ДОЛЖЕН_ работать и на ветке 1.5

Вкусностей версии 2 не использовалось, хоть и очень хотелось :)

Link to post
Share on other sites
Не собираеться :)(

 

...

 

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
../../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
При сборке наблюдаю такое:

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
При сборке наблюдаю такое:

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
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
Привожу ниже патч, с которым собирается, хоть и с диким количеством ругани...

Это очень ПЛОХОЕ решение :)

Странно что вобще собирается...

Link to post
Share on other sites
Привожу ниже патч, с которым собирается, хоть и с диким количеством ругани...

Это очень ПЛОХОЕ решение :)

Странно что вобще собирается...

1. Обоснуйте чем плохое?

2. Как лучше?

Link to post
Share on other sites

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
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

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

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
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...