Pracuję z projektem open source o nazwie snort, który jest napisany w C, pod Linuksem. Poprawnie otworzyłem projekt w netbeans i teraz zamierzam wprowadzić pewne zmiany w tym kodzie źródłowym. Folder src programu zawiera kilka folderów, a także każdy folder ma kilka folderów. Słyszałem, że netbeans jest w stanie generować pliki make. Wprowadzam zmiany w plikach src w folderze XFolder i chcę użyć funkcji bibliotecznej w innym folderze w moim projekcie (YFolder). Zawarłem plik .h i użyłem funkcji poprawnie.w tym pliki nagłówkowe w C i kompilacja
#include"../YFolder/lib.h"
Teraz, kiedy mogę skompilować program, to jest ok, ale kiedy używać dynamicznych bibliotek „.so (współdzielone pliki obiektowe)”, który powstał w procesie make; i uruchom program, widzę błąd, który oznacza, że funkcja używana z innego folderu nie jest zdefiniowana i widzę ten błąd; (sfxhash_new to nazwa funkcji zewnętrznej, którą wywołałem).
libsf_sip_preproc.so: nieokreślony symbol: sfxhash_new
również edytowany Makefile.am i dodaje źródło tego pakietu (../YFolder/lib.c and lib.h
); Ale nieskuteczne. Czy ktoś może mi pomóc?
EDIT:
jestem w katalogu src/dynamic-preprocesor/SIP chcę użyć funkcji w pliku: src/sfutil/sfxHash.c nazwa funkcji jest sfxhash_new (... .. ...) Zawarłem poprawnie plik sfxHash.h. Zrobiłem kilka zmian w moim Makefile.am, ale głównym makefile jest to. Plik
My 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
Musisz umieścić flagi "-lnet -lpcre" itd. Na samym końcu LDFLAGS, zrobiłeś to? –
To też może pomóc [tutaj] (http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries-cannot-open-shared-object-file-no-s) – ervinbosenbacher
Uwaga błędy "niezdefiniowanego symbolu" nie mają nic wspólnego z poprawnym lub niepoprawnym włączeniem pliku nagłówkowego; są to błędy linkera i pokazują, że brakuje niektórych bibliotek. –