Estoy trabajando con un proyecto de código abierto llamado snort, que está escrito en C, bajo Linux. Abrí el proyecto en netbeans correctamente y ahora voy a hacer algunos cambios en este código fuente. La carpeta src del programa contiene varias carpetas y también cada carpeta tiene algunas carpetas. Escuché que netbeans puede generar archivos make. Estoy haciendo algunos cambios en los archivos src en la carpeta XFolder y quiero usar una función de biblioteca en otra carpeta en mi proyecto (YFolder). Incluí el archivo .h y usé la función correctamente.incluyendo archivos de cabecera en C y compilar
#include"../YFolder/lib.h"
Ahora cuando puedo compilar el programa, que está bien, pero cuando se utiliza bibliotecas dinámicas ".so (archivos de objetos compartidos)" que creó en el proceso de maquillaje; y ejecutar el programa, veo un error que significa que la función que utilicé de otra carpeta no está definida y veo este error; (sfxhash_new es el nombre de la función externa que llamé).
libsf_sip_preproc.so: undefined símbolo: sfxhash_new
I también corrigió Makefile.am y ha añadido las fuentes de ese paquete (../YFolder/lib.c and lib.h
); Pero no es efectivo. ¿Alguien puede ayudarme por favor?
EDIT:
estoy en la carpeta src/dinámico-preprocesador/SIP Quiero usar una función en el archivo: src/sfutil/sfxHash.c el nombre de función es sfxhash_new (... .. . ...) Incluí sfxHash.h correctamente. Hice algunos cambios en mi archivo Makefile.am pero el archivo MAKE principal es este. archivo
Mi Makefile.am:
## $Id
AUTOMAKE_OPTIONS=foreign no-dependencies
INCLUDES = -I../include -I${srcdir}/../libs -I$(srcdir)/includes
libdir = ${exec_prefix}/lib/snort_dynamicpreprocessor
lib_LTLIBRARIES = libsf_sip_preproc.la
libsf_sip_preproc_la_LDFLAGS = -shared -export-dynamic -module @[email protected]
if SO_WITH_STATIC_LIB
libsf_sip_preproc_la_LIBADD = ../libsf_dynamic_preproc.la
else
nodist_libsf_sip_preproc_la_SOURCES = \
../include/sf_dynamic_preproc_lib.c \
../include/sf_ip.c \
endif
libsf_sip_preproc_la_SOURCES = \
spp_sip.c \
spp_sip.h \
sip_config.c \
sip_config.h \
sip_parser.c \
sip_parser.h \
sip_dialog.c \
sip_dialog.h \
sip_roptions.c \
sip_roptions.h \
sip_utils.c \
sip_utils.h \
sip_debug.h \
../include/sfxhash.c \ -----------------> I have copied src files in this dictionary
../include/sfxhash.h ------------------>
EXTRA_DIST = \
sf_sip.dsp
all-local: $(LTLIBRARIES)
$(MAKE) DESTDIR=`pwd`/../build install-libLTLIBRARIES
Tienes que poner las banderas '-lnet -lpcre' etc. al final de LDFLAGS, ¿lo hiciste? –
Esto también podría ser de ayuda [aquí] (http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries-cannot-open-shared-object-file-no-s) – ervinbosenbacher
También tenga en cuenta que los errores de 'símbolo no definido' no tienen nada que ver con la inclusión correcta o incorrecta del archivo de encabezado; son errores de enlazador y muestran que faltan algunas bibliotecas. –