私は、Linux の下で C で書かれたsnortというオープン ソース プロジェクトに取り組んでいます。プロジェクトを netbeans で正しく開いたので、このソース コードにいくつかの変更を加えます。プログラムの src フォルダーにはいくつかのフォルダーが含まれており、各フォルダーにもいくつかのフォルダーがあります。netbeans は make ファイルを生成できると聞きました。フォルダー XFolder 内の src ファイルにいくつかの変更を加えており、プロジェクト内の別のフォルダー (YFolder) でライブラリ関数を使用したいと考えています。.h ファイルをインクルードし、関数を正しく使用しました。
#include"../YFolder/lib.h"
これでプログラムがコンパイルできるようになったのでOKですが、makeの過程で作成したダイナミックライブラリ「.so(共有オブジェクトファイル)」を使うと、プログラムを実行すると、他のフォルダーから使用した関数が定義されていないことを意味するエラーが表示され、このエラーが表示されます。(sfxhash_new は呼び出した外部関数の名前です)。
libsf_sip_preproc.so: 未定義のシンボル: sfxhash_new
Makefile.am も編集し、そのパッケージのソースを追加しました ( ../YFolder/lib.c and lib.h
)。しかし、効果的ではありません。誰でも私を助けてもらえますか?
編集:
私はフォルダー src/dynamic-preprocessor/sip にいます ファイルで関数を使用したい: src/sfutil/sfxHash.c 関数名は sfxhash_new(... ... ...) sfxHash.h を正しく含めました。Makefile.am にいくつかの変更を加えましたが、メインのメイクファイルはこれです。
私の 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 @XCCFLAGS@
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