5

私は、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
4

2 に答える 2

2

ファイルに変更を加えた後、変更はすぐには反映されません (つまり、Makefile.am実行しても変更は表示されません)。最初に対応するファイルを生成/更新する必要があります。そのためには、ソース ツリーの最上位ディレクトリ (または存在する場所)でコマンドを実行する必要があります。新しいソースを含めるための変更がビルドに正常に反映されるようにするには、と のファイル セットが同じであることを確認します。次に、コマンドを実行します。 ソースツリーのある場所から別の場所にファイルを追加すると、独自の依存関係のセットが持ち込まれる可能性があることに注意してください。configuremakeMakefile.inautomakeconfigure.inconfigure.acMakefile.amlibsf_sip_preproc_la_SOURCESMakefile.amMakefile.inconfiguremake
sfxhashソースファイルにはMakefile.am、問題の一部として存在しないファイルとライブラリへのリンクが含まれている場合があります。その場合INCLUDES、ソースに必要なディレクトリを含めるように更新するか、新しいライブラリを に追加する必要がありますlibsf_sip_preproc_la_LIBADD.laに&.aファイルを混在させないでくださいlibsf_sip_preproc_la_LIBADD
お役に立てれば!

于 2012-05-07T18:00:21.633 に答える
1

あなたが書いたように:

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

SO_WITH_STATIC_LIB が true の場合、次の行だと思います。

libsf_sip_preproc_la_LIBADD = ../libsf_dynamic_preproc.la

する必要があります

libsf_sip_preproc_la_LIBADD = ../libsf_dynamic_preproc.a

それが私の考えです、あなたはそれを試すことができます。

于 2012-05-07T16:08:56.533 に答える