私はsnortと呼ばれるオープンソースプロジェクトを、LinuxではC言語で書いています。私はnetbeansでプロジェクトを正しく開いたので、このソースコードにいくつかの変更を加えるつもりです。プログラムのsrcフォルダにはいくつかのフォルダがあり、各フォルダにはいくつかのフォルダがあります。 netbeansがmakeファイルを生成できると聞きました。私はフォルダXFolderのsrcファイルにいくつかの変更を加えており、プロジェクト(YFolder)の別のフォルダでライブラリ関数を使いたいと思っています。私は.hファイルをインクルードし、関数を正しく使いました。はCでヘッダファイルをコンパイルしてコンパイルします
#include"../YFolder/lib.h"
今、私はプログラムをコンパイルすることができたとき、それはOKですが、私はmakeプロセスで作成されたダイナミックライブラリ「の.so(共用オブジェクトファイル)」を使用する場合、プログラムを実行すると、定義されていない別のフォルダから使用した関数を意味するエラーが表示され、このエラーが表示されます。 (sfxhash_newは私が呼び出した外部関数の名前です)。
libsf_sip_preproc.so:未定義シンボル:sfxhash_new
Iはまた、Makefile.amを編集して、そのパッケージ(../YFolder/lib.c and lib.h
)のソースを追加し、しかし効果的ではない。誰も私を助けることができますか?
EDIT:
私は、ファイル内の関数を使用したいフォルダのsrc /ダイナミックプリプロセッサ/ SIP でいます:SRC/sfutil/sfxHash.c 関数名は(sfxhash_newです... .. 。...) sfxHash.hが正しく組み込まれました。 私はMakefile.amにいくつか変更を加えましたが、メインのmakefileはこれです。
マイ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
LDFLAGSの最後に '-lnet -lpcre'などのフラグを置く必要がありますか? –
これはまた助けるかもしれません[こちら](http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries-cannot-open-shared-object-file-no-s) – ervinbosenbacher
'定義されていないシンボル'のエラーは、正しいまたは間違ったヘッダファイルインクルードとは関係ありません。それらはリンカのエラーであり、いくつかのライブラリが見つからないことを示しています。 –