2012-05-06 15 views
5

संकलित करें मैं snort नामक ओपन सोर्स प्रोजेक्ट के साथ काम कर रहा हूं, जो लिनक्स के तहत सी में लिखा गया है। मैंने नेटबीन्स में परियोजना को सही तरीके से खोला और अब मैं इस स्रोत कोड में कुछ बदलाव करने जा रहा हूं। प्रोग्राम के src फ़ोल्डर में कई फ़ोल्डर्स हैं और प्रत्येक फ़ोल्डर में कुछ फ़ोल्डर्स भी हैं। मैंने सुना है कि netbeans फ़ाइलों को बनाने में सक्षम है। मैं फ़ोल्डर XFolder में src फ़ाइलों में कुछ बदलाव कर रहा हूं और मेरी प्रोजेक्ट (वाईफ़ोल्डर) में किसी अन्य फ़ोल्डर में लाइब्रेरी फ़ंक्शन का उपयोग करना चाहता हूं। मैंने .h फ़ाइल शामिल की और फ़ंक्शन का सही ढंग से उपयोग किया।सी में हेडर फाइलों सहित और

#include"../YFolder/lib.h" 

अब जब मैं इस कार्यक्रम को संकलित कर सकते हैं, यह ठीक है, लेकिन जब मैं गतिशील पुस्तकालयों ".so (साझा वस्तु फ़ाइलें)" का उपयोग करें कि मेकअप प्रक्रिया में बनाया है, और प्रोग्राम चलाएं, मुझे एक त्रुटि दिखाई देती है जिसका अर्थ है कि मैं जिस फ़ोल्डर को अन्य फ़ोल्डर से उपयोग करता हूं वह परिभाषित नहीं है और यह त्रुटि देखता है; (sfxhash_new बाहरी फ़ंक्शन का नाम है जिसे मैंने बुलाया)।

libsf_sip_preproc.so: अपरिभाषित प्रतीक: sfxhash_new

मैं भी Makefile.am संपादित और उस पैकेज (../YFolder/lib.c and lib.h) के सूत्रों जोड़ा गया; लेकिन प्रभावी नहीं है। क्या कोई भी कृपया मेरी मदद कर सकता है?

संपादित करें:

मैं फ़ोल्डर src/डायनामिक-पूर्वप्रक्रमक/घूंट में हूँ मैं फ़ाइल में एक समारोह का उपयोग करना चाहते: src/sfutil/sfxHash.c समारोह नाम sfxhash_new है (... .. ...) मैं sfxHash.h सही ढंग से शामिल किया गया। मैंने कुछ बदलाव किए हैं मेरे मेकफ़ाइल.एम में लेकिन मुख्य मेकफ़ाइल यह है।

मेरे 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 
+0

आपको एलडीएफएलजीएस के बहुत अंत में '-lnet -lpcre' इत्यादि झंडे रखना होगा, क्या आपने ऐसा किया था? –

+1

यह भी मदद कर सकता है [यहां] (http://stackoverflow.com/questions/480764/linux-error-while-loading-shared- पुस्तकालय- कैनोट-open-shared-object-file-no-s) – ervinbosenbacher

+3

यह भी ध्यान दें कि 'अपरिभाषित प्रतीक' त्रुटियों के पास सही या गलत शीर्षलेख फ़ाइल समावेशन के साथ कुछ लेना देना नहीं है; वे लिंकर त्रुटियां हैं और दिखाते हैं कि कुछ पुस्तकालय गायब हैं। –

उत्तर

1

लिखा है आप के रूप में:

libsf_sip_preproc_la_LIBADD = ../libsf_dynamic_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 

अगर SO_WITH_STATIC_LIB सच है, मैं इस लाइन लगता है

libsf_sip_preproc_la_LIBADD = ../libsf_dynamic_preproc.a 

यह मेरा विचार है, आप इसे आजमा सकते हैं।

+1

यह सही नहीं है। '.la' फ़ाइल libtool संग्रह फ़ाइलों हैं, इन्हें आवश्यकता के अनुसार स्थिर और गतिशील पुस्तकालयों को उत्पन्न करने के लिए' libtool' द्वारा उपयोग किया जाता है –

2

Makefile.am फ़ाइल में परिवर्तन करने के बाद, परिवर्तन तुरंत दिखाई नहीं कर रहे हैं (यानी अगर आपने configure & make चलाने आप परिवर्तन नहीं देखेंगे)। आपको पहले संबंधित Makefile.in फ़ाइल जेनरेट/अपडेट करनी चाहिए। इसके लिए आपको स्रोत पेड़ की शीर्षतम निर्देशिका में automake कमांड चलाने की आवश्यकता है (जहां configure.in या configure.ac रहता है)। यह सुनिश्चित करने के लिए कि आपके Makefile.am नए स्रोतों को शामिल करने के लिए परिवर्तनों को सफलतापूर्वक निर्माण में प्रतिबिंबित किया जाएगा, libsf_sip_preproc_la_SOURCESMakefile.am में Makefile.in में फ़ाइलों का एक ही सेट है। अब, configure और make आदेश चलाएं।
ध्यान दें कि स्रोत पेड़ में एक और एक स्थान से एक फ़ाइल जोड़ने निर्भरता के अपने स्वयं के सेट में ला सकते हैं यानी sfxhash स्रोत फ़ाइलें फ़ाइलें पुस्तकालयों जो सवाल में Makefile.am के हिस्से के रूप मौजूद नहीं हैं करने के लिए & लिंक, शामिल हो सकते हैं जो आप के मामले में स्रोत द्वारा आवश्यक निर्देशिका को शामिल करने के लिए INCLUDES को अपडेट करना पड़ सकता है और/या libsf_sip_preproc_la_LIBADD में नई लाइब्रेरी जोड़ें। में .la & .a फ़ाइलों को मिलाकर बचें।
आशा है कि इससे मदद मिलती है!

संबंधित मुद्दे