我不知所措,我希望有人能解决这个问题,或者给我一个有用的提示。
我试图在Snort中添加一个预处理器和相应的检测插件。(包括预处理器没有任何错误,但是没有相应的检测插件是无用的)
我已经将代码的必要部分包含到源文件中,并在正确的位置复制了所有必要的文件。
“配置”正在运行,没有任何错误:
./configure --enable-sourcefire --enable-targetbased
但是,当我执行make
时,我会得到以下错误:
plugbase.o: In function 'RegisterRuleOptions':
../snort-2.9.3.1/src/plugbase.c:199: undefined reference to 'SetupProfi'
collect2: error: ld returned 1 exit status
以下是我的plugbase.c
的重要部分
/* built-in detection plugins */
#include "detection-plugins/sp_profinet_func.h"
...
...
...
void RegisterRuleOptions(void)
{
LogMessage("Initializing Plug-ins!\n");
SetupProfi();
}
sp_profinet_func.c
和sp_profinet_func.h
文件在src/detection-plugins
中。这是sp_profinet_func.h
的代码
#ifndef __SP_PROFINET_H__
#define __SP_PROFINET_H__
void SetupProfi(void);
#ifdef DETECTION_OPTION_TREE
u_int32_t SpProfinetFunctionCodeCheckHash(void *d);
int SpProfinetFunctionCodeCheckCompare(void *l, void *r);
#endif
#endif /* __SP_PROFINET_H__ */
这是sp_profinet_func.c
的摘录
void SetupProfi(void)
{
printf("RULES-SetupProfi");
/* map the keyword to an initialization/processing function */
RegisterRuleOption("Profinet_func", SpProfinetFunctionCodeInit, NULL, OPT_TYPE_DETECTION, NULL);
}
我对C/C++编程和编译比较陌生。我已经发现这个错误可能意味着链接问题,但我不知道如何修复它。
有没有人知道如何解决这个问题,并让探测插件启动?
操作系统是Debian7.8,由于插件开发人员的推荐,我使用Snort-Version2.9.3.1。
提前感谢!
克里斯
发布于 2015-04-20 11:58:41
我自己解决了这个问题。谢谢@ RP和@ Pandrei给出的提示来看Makefile。
在./configure
之后,我查看了Makefile
(src/ that ),发现在"am_libspd_a_SOURCES_DIST“下没有sp_profinet_func.c sp_profinet_func.h
的声明,在"am_libspd_a_OBJECTS”下也没有sp_profinet_func.$(OBJEXT)
。
我只是添加了这些声明,并执行了make
和sudo make install
,现在预处理器和检测插件正在运行。
谢谢你的努力。
克里斯
https://stackoverflow.com/questions/29744242
复制相似问题