我正在開發一個名爲snort的開源項目,它是用C語言編寫的,在Linux下。我正確地在netbeans中打開了項目,現在我將對此源代碼進行一些更改。程序的src文件夾包含多個文件夾,每個文件夾也有一些文件夾。我聽說netbeans能夠生成make文件。我正在對文件夾XFolder中的src文件進行一些更改,並希望在我的項目(YFolder)中的另一個文件夾中使用庫函數。我包含了.h文件並正確使用了該功能。在C中包含頭文件並編譯
#include"../YFolder/lib.h"
現在,當我可以編譯該程序,這是好的,但是,當我使用動態庫「所以(共享對象文件)」,在化妝過程創建的;並運行程序,我看到一個錯誤,這意味着我從其他文件夾中使用的功能未定義,看到這個錯誤; (sfxhash_new是我調用的外部函數的名稱)。
libsf_sip_preproc.so:未定義符號:sfxhash_new
我還編輯Makefile.am並補充說封裝(../YFolder/lib.c and lib.h
)的來源;但沒有效果。任何人都可以幫助我嗎?
編輯:
我在文件夾中的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
你必須把'-lnet -lpcre'等標志放在LDFLAGS的最後,你做了嗎? – 2012-05-06 04:02:10
這可能也有幫助[here](http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries-cannot-open-shared-object-file-no-s) – ervinbosenbacher
另請注意'未定義符號'錯誤與正確或不正確的頭文件包含無關;他們是鏈接器錯誤,並顯示一些庫缺失。 – 2012-05-06 04:05:30