Tôi đang làm việc với một dự án nguồn mở được gọi là snort, được viết bằng C, dưới Linux. Tôi đã mở dự án trong netbeans một cách chính xác và bây giờ tôi sẽ làm một số thay đổi trong mã nguồn này. Thư mục src của chương trình chứa một số thư mục và mỗi thư mục có một số thư mục. Tôi nghe nói rằng netbeans có thể tạo ra các tập tin. Tôi đang làm một số thay đổi trong các tập tin src trong thư mục XFolder và muốn sử dụng một chức năng thư viện trong một thư mục khác trong dự án của tôi (YFolder). Tôi đã bao gồm tập tin .h và sử dụng đúng chức năng.bao gồm các tệp tiêu đề trong C và biên dịch
#include"../YFolder/lib.h"
Bây giờ khi tôi có thể biên dịch chương trình, Ok, nhưng khi tôi sử dụng thư viện động ".so (tệp đối tượng được chia sẻ)" được tạo trong quá trình thực hiện; và chạy chương trình, tôi thấy lỗi có nghĩa là chức năng tôi đã sử dụng từ thư mục khác không được xác định và thấy lỗi này; (sfxhash_new là tên của hàm bên ngoài mà tôi đã gọi).
libsf_sip_preproc.so: undefined symbol: sfxhash_new
Tôi cũng sửa Makefile.am và bổ sung các nguồn của gói đó (../YFolder/lib.c and lib.h
); Nhưng không hiệu quả. Có ai có thể giúp tôi không?
EDIT:
Tôi đang ở thư mục src/dynamic-Preprocessor/ngụm Tôi muốn sử dụng một hàm trong file: src/sfutil/sfxHash.c tên hàm là sfxhash_new (... .. . ...) Tôi đã bao gồm chính xác sfxHash.h. Tôi đã thực hiện một số thay đổi Trong Makefile.am của tôi nhưng makefile chính là điều này.
My Makefile.am file:
## $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
Bạn phải đặt cờ '-lnet -lpcre' v.v. vào cuối của LDFLAGS, bạn đã làm điều đó chưa? –
Điều này có thể giúp quá [ở đây] (http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries-cannot-open-shared-object-file-no-s) – ervinbosenbacher
Cũng lưu ý lỗi 'biểu tượng không xác định' không có gì liên quan đến việc bao gồm tệp tiêu đề chính xác hoặc không chính xác; chúng là lỗi liên kết và cho thấy một số thư viện bị thiếu. –