Hi all, I'm trying to install mod_assl (a module I wrote) in Apache as an DSO object. This works fine but I now need mod_assl to use functions in assl.c (also my code), and these assl.c functions should also be available to external programs such as application.c (which has it's own main method).
I have written a module (mod_assl.c) which uses functions in assl.c (there's also an assl.h - both mine). I've also written an application application.c which also calls functions in assl.c. They are all in the same directory $HOME/ApacheSource/httpd-2.2.3/modules/ssl/ (in the source tree) The problem: I compiled the assl.c code: libtool --mode=compile gcc -fPIC -DSHARED_MODULE -D_LARGEFILE64_SOURCE -I$HOME/ApacheSource/httpd-2.2.3/include/ -I$HOME/ApacheSource/httpd-2.2.3/srclib/apr/include/ -I$HOME/ApacheSource/httpd-2.2.3/srclib/apr-util/include/ -I$HOME/ApacheSource/httpd-2.2.3/server/mpm/prefork/ -I$HOME/ApacheSource/httpd-2.2.3/os/unix/ -c assl.c which creates: assl.o assl.lo I then compiled my mod_ssl.c module into Apache2 (note assl.lo at the end): ./sbin/apxs -i -a -c ../ApacheSource/httpd-2.2.3/modules/ssl/mod_assl.c ../ApacheSource/httpd-2.2.3/modules/ssl/assl.lo to create: (in $HOME/Apache2/libexec) mod_assl.so Then compiled the application.c: (probably don't need all the -I) libtool --mode=compile gcc -fPIC -DSHARED_MODULE -D_LARGEFILE64_SOURCE -I$HOME/ApacheSource/httpd-2.2.3/include/ -I$HOME/ApacheSource/httpd-2.2.3/srclib/apr/include/ -I$HOME/ApacheSource/httpd-2.2.3/srclib/apr-util/include/ -I$HOME/ApacheSource/httpd-2.2.3/server/mpm/prefork/ -I$HOME/ApacheSource/httpd-2.2.3/os/unix/ -c application.c which creates: application.o application.lo Now I need to create an executable (test): libtool --mode=link gcc -g -O -o test application.lo $HOME/Apache2/libexec/mod_assl.so $HOME/Apache2/lib/libapr-1.so $HOME/Apache2/lib/libaprutil-1.so $HOME/OpenSSLsource/openssl-0.9.8d/libssl.a $HOME/OpenSSLsource/openssl-0.9.8d/libcrypto.a -rpath $HOME/Apache2/libexec But I get: gcc -g -O -o test .libs/application.o $HOME/Apache2/libexec/mod_assl.so $HOME/Apache2/lib/libapr-1.so $HOME/Apache2/lib/libaprutil-1.so $HOME/OpenSSLsource/openssl-0.9.8d/libssl.a $HOME/OpenSSLsource/openssl-0.9.8d/libcrypto.a -Wl,--rpath -Wl,$HOME/Apache2/libexec $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ap_log_rerror' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ssl_var_lookup' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ssl_expr_exec' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ssl_module' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ap_hook_pre_connection' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ssl_expr_comp' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ap_log_error' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ap_hook_access_checker' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ap_hook_pre_config' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ssl_log_ssl_error' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ap_log_cerror' $HOME/Apache2/libexec/mod_assl.so: undefined reference to `ssl_io_buffer_fill' collect2: ld returned 1 exit status Which library am I missing? Surely it should have complained when I created mod_assl.so in the first place? I've tried MANY things but nothing seems to work. Anyone see a problem? Is this the right way to approach the problem of sharing a module? Many many thanks in advance Christiaan
