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],[EMAIL PROTECTED])
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.

Responder a