Виктор, я пытаюсь прикрутить модуль 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

Ответить