Hello, I will try to explain what i am trying to achive. I am developing a freeradius module called rlm_itap. This module uses a shared library called print.so (a library i use for test purposes.). There is only one procedure in the library and it is called : myprint() . I am able to run freeradius server with my own module : $ radiusd -X I send a test message with $ radtest testuser "pass" localhost 0 testing123 If i do not use myprint() function in my own module everything works fine and i am able to receive the incomming message: +- entering group authorize {...} ++[preprocess] returns ok ITAP: Received auth message =>*My own debug msg* But when i use the method myprint() from the library print.so , i get the error when i run the server and send a message with radtest : /# Executing section authorize from file /usr/local/etc/raddb/sites-enabled/default +- entering group authorize {...} ++[preprocess] returns ok ITAP: Received auth message /libexec/ld-elf.so.1: /usr/local/lib/freeradius-2.1.10/rlm_itap-2.1.10.so: *Undefined symbol "myprint"*/ So this is the problem i am having. After your email i started to use autoconf and it is easier than writing my own makefile. But i am still not able to resolve this problem. As far as i understand freeradius is not able to see find print.so library. I have to find a way to show the server this library.... I prepare my module as : $ autoconf $ ./configure $ gmake clean $ gmake $ gmake install Here is some more information and my makefiles: *$ gmake * [root@vm1 /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/rlm_itap]# gmake for x in .libs/* rlm_itap.la; do \ rm -rf /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/lib/$x; \ ln -s /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/rlm_itap/$x /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/lib/$x; \ done [root@vm1 /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/rlm_itap]# gmake clean [root@vm1 /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/rlm_itap]# gmake /usr/local/bin/libtool --mode=compile cc -O2 -pipe -I/usr/local/include -L/usr/local/lib -DHAVE_LT_DLADVISE_INIT -DHAVE_LT_DLADVISE_INIT -fno-strict-aliasing -pthread -Wall -D_GNU_SOURCE -DNDEBUG -I/usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src -I/usr/include -I/home/resit/radius/include/ -c rlm_itap.c libtool: compile: cc -O2 -pipe -I/usr/local/include -L/usr/local/lib -DHAVE_LT_DLADVISE_INIT -DHAVE_LT_DLADVISE_INIT -fno-strict-aliasing -pthread -Wall -D_GNU_SOURCE -DNDEBUG -I/usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src -I/usr/include -I/home/resit/radius/include/ -c rlm_itap.c -fPIC -DPIC -o .libs/rlm_itap.o libtool: compile: cc -O2 -pipe -I/usr/local/include -L/usr/local/lib -DHAVE_LT_DLADVISE_INIT -DHAVE_LT_DLADVISE_INIT -fno-strict-aliasing -pthread -Wall -D_GNU_SOURCE -DNDEBUG -I/usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src -I/usr/include -I/home/resit/radius/include/ -c rlm_itap.c -o rlm_itap.o
/dev/null 2>&1 /usr/local/bin/libtool --mode=link cc -release 2.1.10 \ -module -export-dynamic -rpath=/usr/lib:/usr/local/lib -o rlm_itap.la \ -rpath /usr/local/lib/freeradius-2.1.10 rlm_itap.lo rlm_itap.c /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/lib/libfreeradius-radius.la -lc -L/home/resit/radius/lib/ /home/resit/radius/lib/print.so libtool: link: cc -shared .libs/rlm_itap.o -Wl,-rpath -Wl,/usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/lib/.libs -Wl,-rpath -Wl,/usr/local/lib/freeradius-2.1.10 /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/lib/.libs/libfreeradius-radius.so -L/usr/local/lib -pthread -L/home/resit/radius/lib/ -pthread -pthread -Wl,-soname -Wl,rlm_itap-2.1.10.so -o .libs/rlm_itap-2.1.10.so libtool: link: (cd ".libs" && rm -f "rlm_itap.so" && ln -s "rlm_itap-2.1.10.so" "rlm_itap.so") libtool: link: ar cru .libs/rlm_itap.a rlm_itap.o libtool: link: ranlib .libs/rlm_itap.a libtool: link: ( cd ".libs" && rm -f "rlm_itap.la" && ln -s "../rlm_itap.la" "rlm_itap.la" ) for x in .libs/* rlm_itap.la; do \ rm -rf /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/lib/$x; \ ln -s /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/rlm_itap/$x /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/lib/$x; \ done
*$ gmake install : *[root@vm1 /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/rlm_itap]# gmake install gmake[1]: Entering directory `/usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/rlm_itap' touch . gmake[1]: Leaving directory `/usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/rlm_itap' if [ "xrlm_itap" != "x" ]; then \ /usr/local/bin/libtool --mode=install /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/install-sh -c -c \ rlm_itap.la /usr/local/lib/freeradius-2.1.10/rlm_itap.la || exit $?; \ rm -f /usr/local/lib/freeradius-2.1.10/rlm_itap-2.1.10.la; \ ln -s rlm_itap.la /usr/local/lib/freeradius-2.1.10/rlm_itap-2.1.10.la || exit $?; \ fi libtool: install: warning: relinking `rlm_itap.la' libtool: install: (cd /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/modules/rlm_itap; /bin/sh /usr/local/bin/libtool --mode=relink cc -release 2.1.10 -module -export-dynamic -rpath=/usr/lib:/usr/local/lib -o rlm_itap.la -rpath /usr/local/lib/freeradius-2.1.10 rlm_itap.lo rlm_itap.c /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/src/lib/libfreeradius-radius.la -lc -L/home/resit/radius/lib/ /home/resit/radius/lib/print.so ) libtool: relink: cc -shared .libs/rlm_itap.o -Wl,-rpath -Wl,/usr/local/lib/freeradius-2.1.10 -L/usr/local/lib/freeradius-2.1.10 -lfreeradius-radius -L/usr/local/lib -pthread -L/home/resit/radius/lib/ -pthread -pthread -Wl,-soname -Wl,rlm_itap-2.1.10.so -o .libs/rlm_itap-2.1.10.so libtool: install: /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/install-sh -c -c .libs/rlm_itap-2.1.10.soT /usr/local/lib/freeradius-2.1.10/rlm_itap-2.1.10.so libtool: install: (cd /usr/local/lib/freeradius-2.1.10 && { ln -s -f rlm_itap-2.1.10.so rlm_itap.so || { rm -f rlm_itap.so && ln -s rlm_itap-2.1.10.so rlm_itap.so; }; }) libtool: install: /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/install-sh -c -c .libs/rlm_itap.lai /usr/local/lib/freeradius-2.1.10/rlm_itap.la libtool: install: /usr/ports/net/freeradius2/work/freeradius-server-2.1.10/install-sh -c -c .libs/rlm_itap.a /usr/local/lib/freeradius-2.1.10/rlm_itap.a libtool: install: chmod 644 /usr/local/lib/freeradius-2.1.10/rlm_itap.a libtool: install: ranlib /usr/local/lib/freeradius-2.1.10/rlm_itap.a ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/lib/freeradius-2.1.10 If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- [root@vm1 /usr/local/lib/freeradius-2.1.10]# *nm rlm_itap-2.1.10.so* 00000000001011c0 A _DYNAMIC 00000000001013a8 A _GLOBAL_OFFSET_TABLE_ w _Jv_RegisterClasses 0000000000101388 d __CTOR_END__ 0000000000101380 d __CTOR_LIST__ 0000000000101398 d __DTOR_END__ 0000000000101390 d __DTOR_LIST__ 00000000001011b8 r __FRAME_END__ 00000000001013a0 d __JCR_END__ 00000000001013a0 d __JCR_LIST__ 0000000000101408 A __bss_start w __cxa_finalize@@FBSD_1.0 0000000000000b80 t __do_global_ctors_aux 0000000000000a00 t __do_global_dtors_aux 0000000000101000 d __dso_handle 0000000000101408 A _edata 0000000000101410 A _end 0000000000000bb8 T _fini 0000000000000970 T _init U cf_section_parse 0000000000101408 b completed.5133 U debug_flag 0000000000000a50 t frame_dummy U free@@FBSD_1.0 0000000000000aa0 t itap_accounting 0000000000000a80 t itap_authenticate 0000000000000ac0 t itap_authorize 0000000000000ab0 t itap_checksimul 0000000000000af0 t itap_detach 0000000000000b00 t itap_instantiate 0000000000000a90 t itap_preacct U log_debug 00000000001010a0 d module_config U myprint 0000000000101008 d p.5131 U rad_malloc 0000000000000c7f r rcsid 0000000000000c57 r rcsid_conffile_h 0000000000000c52 r rcsid_event_h 0000000000000c66 r rcsid_hash_h 0000000000000c75 r rcsid_libradius_h 0000000000000c61 r rcsid_md4_h 0000000000000c70 r rcsid_missing_h 0000000000000c43 r rcsid_modules_h 0000000000000c5c r rcsid_packet_h 0000000000000c7a r rcsid_radiusd_h 0000000000000c48 r rcsid_realms_h 0000000000000c4d r rcsid_stats_h 0000000000000c6b r rcsid_token_h 0000000000101020 D rlm_itap [root@vm1 /usr/local/lib/freeradius-2.1.10]# *ldd rlm_itap-2.1.10.so* rlm_itap-2.1.10.so: libfreeradius-radius-2.1.10.so => /usr/local/lib/freeradius-2.1.10/libfreeradius-radius-2.1.10.so (0x800c00000) libthr.so.3 => /lib/libthr.so.3 (0x800d21000) libc.so.7 => /lib/libc.so.7 (0x800647000) [root@vm1 /usr/local/lib/freeradius-2.1.10]#*ldd libfreeradius-radius-2.1.10.so * libfreeradius-radius-2.1.10.so: libthr.so.3 => /lib/libthr.so.3 (0x800c00000) libc.so.7 => /lib/libc.so.7 (0x800647000) *My makefile.in file* ####################################################################### TARGET = @targetname@ SRCS = rlm_itap.c HEADERS = icc-wrapper.h print.h RLM_CFLAGS = @itap_cflags@ -I/home/resit/radius/include/ RLM_LIBS = @itap_ldflags@ -L/home/resit/radius/lib/ /home/resit/radius/lib/print.so RLM_INSTALL = install-itap ## this uses the RLM_CFLAGS and RLM_LIBS and SRCS defs to make TARGET. include ../rules.mak $(LT_OBJS): $(HEADERS) ## the rule that RLM_INSTALL tells the parent rules.mak to use. install-itap: touch . *my makefile :* ####################################################################### TARGET = rlm_itap SRCS = rlm_itap.c HEADERS = icc-wrapper.h print.h RLM_CFLAGS = -I/usr/include -I/home/resit/radius/include/ RLM_LIBS = -lc -L/home/resit/radius/lib/ /home/resit/radius/lib/print.so RLM_INSTALL = install-itap ## this uses the RLM_CFLAGS and RLM_LIBS and SRCS defs to make TARGET. include ../rules.mak $(LT_OBJS): $(HEADERS) ## the rule that RLM_INSTALL tells the parent rules.mak to use. install-itap: touch . *my configure.in file: * AC_PREREQ([2.53]) AC_INIT(rlm_itap.c) # change 'itap' AC_REVISION($Revision$) AC_DEFUN(modname,[rlm_itap]) # change 'itap' if test x$with_[]modname != xno; then AC_PROG_CC AC_PROG_CPP dnl put configuration checks here. dnl set $fail to what's missing, on fatal errors. dnl use AC_MSG_WARN() on important messages. AC_CHECK_LIB(c, printf, [ itap_ldflags="$itap_ldflags -lc" ], [ fail=$fail" printf" ] ) AC_CHECK_HEADER(stdio.h, [ itap_cflags="$itap_cflags -I/usr/include" ], [ fail=$fail" stdio.h" ] ) AC_CHECK_HEADERS(stdio.h stdlib.h) # for the config.h defs AC_CHECK_FUNCS(printf) # for the config.h defs targetname=modname # keep this! Don't change! else targetname= # keep this! Don't change! echo \*\*\* module modname is disabled. # keep this! Don't change! fi dnl Don't change this section. if test x"$fail" != x""; then if test x"${enable_strict_dependencies}" = x"yes"; then AC_MSG_ERROR([set --without-]modname[ to disable it explicitly.]) else AC_MSG_WARN([silently not building ]modname[.]) AC_MSG_WARN([FAILURE: ]modname[ requires: $fail.]); targetname="" fi fi AC_SUBST(itap_cflags) # change 'itap' AC_SUBST(itap_ldflags) # change 'itap' AC_CONFIG_HEADER(config.h) # delete if you don't want a config.h file. AC_SUBST(targetname) # keep this! Don't change! AC_OUTPUT(Makefile) # keep this! Don't change! On 12/07/2011 04:55 PM, Alan DeKok wrote:
Mustafa Reşit Şahin wrote:
Which file mentioned with "These definitions are also # echoed into another file in ../lib," ? Files automatically produced by the builds.
I could not find this file. As far as i understand, i have to add shared/static libraries ( which i link from my new module ) into this file . So freeradius can find them. No. You just add them in the RLM_LIBS line.
I consider this because i get the error :
/libexec/ld-elf.so.1: /usr/local/lib/freeradius-2.1.10/rlm_itap-2.1.10.so: Undefined symbol "sendiccmsg"
when i run radiusserver and send an autorization message to server. You probably need to re-build radiusd, too.
Or... *show* what you did. This isn't hard.
The current build process *can* link to static libraries, and *does* link to static libraries, and *works* when modules are linked to static libraries. If you follow the examples, it *should* work.
Alan DeKok. - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
-- Mustafa Reşit Şahin Endersys İş Tel: 0216 470 94 23 Dahili:306 Cep Tel:0507 707 68 12