Виктор, я пытаюсь прикрутить модуль kas3.c, взятый с Вашего сайта
(http://mta.org.ua/exim-4.69-conf/dlfunc/kas3/kas3.c)
Сделал Makefile на основе Вашего, исходники exim4, конечно, доступны (иначе не
собирался exim-dlfunc.so).
EXIMSRC =/usr/local/src/deb/exim-dlfunc/exim4-4.72/src
EXIM2SRC
=/usr/local/src/deb/exim-dlfunc/exim4-4.72/build-tree/build-exim4-daemon-custom
KASINCLUDE =/usr/local/ap-mailfilter3/include
INCLUDE =-I${EXIMSRC} -I${EXIM2SRC} -I/usr/local/include -I${KASINCLUDE}
OBJS =kas3.o
CFLAGS =-O2 -shared ${INCLUDE} -fPIC -g
CLIBS =-L/usr/lib
STATICLIBS =-L/usr/local/ap-mailfilter3/lib -lspamtest
BINDIR =/usr/lib
all: exim-dlfunc
exim-dlfunc: exim-dlfunc.so
exim-dlfunc.so: kas3.o
gcc $(CFLAGS) -o $@ $(CLIBS) $(OBJS) $(STATICLIBS)
install: all
cp -f exim-dlfunc.so ${BINDIR}
clean:
rm -f *.o *.so
%.o: %.c
gcc -c $(CFLAGS) $< -o $@
При сборке выполняеются следующие 2 команды:
gcc -c -O2 -shared -I/usr/local/src/deb/exim-dlfunc/exim4-4.72/src
-I/usr/local/src/deb/exim-dlfunc/exim4-4.72/build-tree/build-exim4-
sr/local/ap-mailfilter3/include -fPIC -g kas3.c -o kas3.o
gcc -O2 -shared -I/usr/local/src/deb/exim-dlfunc/exim4-4.72/src
-I/usr/local/src/deb/exim-dlfunc/exim4-4.72/build-tree/build-exim4-dae
local/ap-mailfilter3/include -fPIC -g -o exim-dlfunc.so -L/usr/lib kas3.o
-L/usr/local/ap-mailfilter3/lib -lspamtest
Пропатчил exim4 патчем
(http://mta.org.ua/exim-4.68-conf/patches/exim-4.68-remove_header/patch-src::remove_header.patch),
но после подключения модуля exim-dlfunc.so получил ошибку при приёме письма:
2012-02-22 23:05:06 1S0HUw-0002AP-7G dlopen "/usr/lib/exim-dlfunc.so" failed:
/usr/lib/exim-dlfunc.so: undefined symbol: acl_removed_headers
Я подумал, что не пропатчился exim, поэтому закомментировал в файле kas3.c
строки, имеющие отношение к acl_removed_headers, скомпилировал снова
exim-dlfunc.so и получил уже другую ошибку:
2012-02-23 21:48:46 1S0cmP-0004xo-R5 dlopen "/usr/lib/exim-dlfunc.so" failed:
/usr/lib/exim-dlfunc.so: undefined symbol: split_spool_directory. Это точно в
экзиме есть, поэтому я подумал об неправильной сборке самого exim4 и начал
изучать ситуацию. Нашёл обсуждение за 2008 год, мой случай такой же. Но пока не
получается :(
Начал менять в Makefile (который в debian называется EDITME.exim4-custom)
значение переменной EXTRALIBS.
Ещё дополнительно пробовал ставить -Wl,-export-dynamic и -rdynamic (согласно
п.3.4 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html) - но
без результата.
Perl собирается работает, с помощью него я сделал занесение в memcache ошибок
авторизации и проверку.
P.S. Не пойму, как писать в этот лист? Отвечать на адрес листа или на адрес
автора объявления и копию на адрес листа? А то получилось, что мне Лена
ответила, я написал ответ - а в лист это не попало.
24 февраля 2012, 00:08 от Victor Ustugov <[email protected]>:
> Алексей Киреев wrote:
> > Здравствуйте.
>
> приветствую
>
> > Не получается собрать exim в debian для работы с dlopen. В логах:
> >
> > 2012-02-23 21:48:46 1S0cmP-0004xo-R5 dlopen "/usr/lib/exim-dlfunc.so"
> > failed: /usr/lib/exim-dlfunc.so: undefined symbol: split_spool_directory
>
> исходники exim'а доступны на момент сборки dlfunc? в соседнем письме
> Лена в строке сборки указала
> -I/usr/ports/mail/exim/work/exim-4.77/build-FreeBSD-i386
> -L/usr/local/lib - это именно то, о чем я пишу.
>
> если исходники exim'а на момент сборки доступны, то есть еще одна не
> совсем очевидная причина вышеуказанной проблемы.
>
> подобная проблема может проявляться, если exim собран без поддержки perl'а.
>
> чуть больше года назад эта проблема уже обсуждалась в листе:
> http://mailground.net/pipermail/exim-users/2011-January/000242.html
>
> > Пытался сделать следующее (ситуация один в один с той, что описана тут -
> > http://comments.gmane.org/gmane.mail.exim.user/80545):
> >
> > EXTRALIBS=-lpam --export-dynamic - ошибка та же
> >
> > EXTRALIBS=-lpam --export-dynamic -ldl - ошибка та же
> >
> > EXTRALIBS=-lpam --export-dynamic -export-dynamic - ошибка та же
> >
> > EXTRALIBS=-lpam -export-dynamic -shared - тут экзим вообще не работает,
> > падает в корку
> >
> > EXTRALIBS=-Wl,-E -lpam -export-dynamic - ошибка та же
> >
> > Для проверки, что вообще флаги принимают участие - сделал:
> >
> > EXTRALIBS=-lpam -export-dynamic -lek-flag, компиляция завершилась ошибкой:
> >
> > ...
> > gcc -o exim
> > /usr/bin/ld: cannot find -lek-flag
> > collect2: ld returned 1 exit status
> > make[1]: *** [exim] Error 1
> > make[1]: Leaving directory
> > `/usr/local/src/deb/exim-dlfunc/exim4-4.72/build-tree/build-Linux-i386'
> > make: *** [build-exim4-daemon-custom/exim] Ошибка 2
> > dpkg-buildpackage: ошибка: debian/rules build возвратил код ошибки 2
> >
> > Что посоветуете?
>
> вот другой рабочий пример сборки dlfunc на FreeBSD с двумя функциями:
>
> gcc -c -O2 -shared
> -I/usr/ports/mail/exim/work/exim-4.77/build-FreeBSD-i386
> -I/usr/local/include -fPIC -g ip2country.c -o ip2country.o
> gcc -c -O2 -shared
> -I/usr/ports/mail/exim/work/exim-4.77/build-FreeBSD-i386
> -I/usr/local/include -fPIC -g rspamd.c -o rspamd.o
> gcc -O2 -shared -I/usr/ports/mail/exim/work/exim-4.77/build-FreeBSD-i386
> -I/usr/local/include -fPIC -g -o exim-dlfunc.so -L/usr/local/lib -lGeoIP
> ip2country.o rspamd.o
>
> --
> Best wishes Victor Ustugov mailto:[email protected]
> public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
> ICQ UIN: 77186900, 371808614 nic-handle: CRV-UANIC
>
> _______________________________________________
> Exim-users mailing list
> [email protected]
> http://mailground.net/mailman/listinfo/exim-users
>
>
_______________________________________________
Exim-users mailing list
[email protected]
http://mailground.net/mailman/listinfo/exim-users