[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Problema al compilar un programa con una librería utilizando autotools



Hola a todos. Me acabo de inscribir en estos foros porque después de mucho trastear y mirar manuales no he conseguido compilar un programa utilizando las autotools (aclocal, autoheader, automake, autoconf). El programa es sencillito, consta de un módulo para la librería ( librbfbd.h, ibrbfbd.c) y para el programa principal (bdviewer_func.h bdviewer_func.c bdviewer.c). Me explico, si tengo todos los fuentes en el mismo directorio lo compila perfectamente; es cuando los organizo en una estructura de árbol cuando no consigo que me compile. A continuación les cuento los detalles:
- Estructura de directorios: a partir de un directorio llamado bdviewer cuelga el siguiente árbol. Los fuentes se encuentran en src/exe, para el programa, y en src/lib, para la librería.
 ./doc
 ./src/exe
 ./src/lib
 ./src
 ./build

 Uso el siguiente configure.ac:
AC_INIT([BDViewer], [1.0],[f_gurban@yahoo.com])
AM_INIT_AUTOMAKE([bdviewer], [1.0])
AM_CONFIG_HEADER(config.h )
AC_PROG_CPP
AC_PROG_CC
AC_PROG_RANLIB
AC_PROG_MAKE_SET
AC_CHECK_HEADERS([mysql.h mysql/mysql.h])
AC_SEARCH_LIBS([mysql_real_connect],[mysqlclient],,AC_MSG_ERROR([No se puede enlazar con libmysqlclient]))
AC_CONFIG_FILES([Makefile
 src/Makefile
 src/lib/Makefile
 src/exe/Makefile])
AC_OUTPUT

Y los siguientes Makefiles.am:
1) En el raíz del proyecto:
SUBDIRS = src
EXTRA_DIST = doc

2) En la carpeta src:
SUBDIRS = lib exe

3) En la carpeta lib:
lib_LIBRARIES = librbfbd.a
librbfbd_a_SOURCES = librbfbd.h librbfbd.c

4) En la carpeta exe:
INCLUDES = -I$(top_srcdir)/src/lib
bin_PROGRAMS = bdviewer
bdviewer_SOURCES = bdviewer_func.h bdviewer_func.c bdviewer.c
bdviewer_LDFLAGS = -L$(top_srcdir)/src/lib/
bdviewer_LDADD = -lrbfbd
---------------------------------------------------
Como se puede ver el programa no tiene mucha ciencia, sin embargo, después de generar los scripts con (aclocal, autoheader, automake, autoconf), me paso al directorio build/ y desde allí ejecuto ../configure, cuando termina de configurar ejecuto el comando make y me da el siguiente resultado:

make --all-recursive
make[1]: se ingresa al directorio '/bdviewer/build'
Making all in src
make[2]: se ingresa al directorio '/bdviewer/build/src'
Making all in lib
make[3]: se ingresa al directorio '/bdviewer/build/src/lib'
gcc -DHAVE_CONFIG_H -I. -I../../../src/lib -I../.. -g -O2 -c ../../../src/lib/librbfbd.c
rm -f librbfbd.a
ar cru librbfbd.a librbfbd.o
ranlib librbfbd.a
make[3]: se sale del directorio '/bdviewer/build/src/lib'
Making all in exe
make[3]: se ingresa al directorio '/bdviewer/build/src/exe'
gcc -DHAVE_CONFIG_H -I. -I../../../src/exe -I../.. -I../../../src/lib -g -O2 -c ../../../src/exe/bdviewer_func.c
gcc -DHAVE_CONFIG_H -I. -I../../../src/exe -I../.. -I../../../src/lib -g -O2 -c ../../../src/exe/bdviewer.c
gcc -g -O2 -o bdviewer -L../../../src/lib/ bdviewer_func.o bdviewer.o -lrbfbd -lmysqlclient
/usr/bin/ld: no se puede encontrar -lrbfbd
collect2: ld devolvió el estado de salida 1
make[3]: *** [bdviewer] Error 1
make[3]: se sale del directorio '/bdviewer/build/src/exe'
make[2]: *** [all-recursive] Error 1
make[2]: se sale del directorio '/bdviewer/build/src'
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio '/bdviewer/build'
make: *** [all-recursive-am] Error 2

-------------------------
Yo creo que el fallo está en el Makefile.am que está en src/exe, sin embargo, después de leer documentación a punta pala, no consigo verlo por ningún lado. Si alguno de ustedes me puede ayudar con alguna idea o indicarme en que me estoy equivocando lo agradecería. Muchas gracias por su atención.


Reply to: