iptables :根据库libiptc,自写库librtc,并且使用automake修改makefile文件

来源:互联网 发布:杭州软件外包公司 编辑:程序博客网 时间:2024/05/22 12:58

出于项目需要,要修改iptables源代码。自己对比着libiptc库写了一个librtc库,然后要想成功编译和连接,就必须修改Makefile文件。网上看了一下资料,iptables的Makefile文件是用autotools这个工具写成的,学习了一下autotools以及相关文件的语法。修改了相关文件,最后编译链接运行成功。记录如下:

autotools这个工具的使用网上有很多教程。使用方法不再赘述。
实际上使用过程中需要自己修改和编写的只有两个文件:configure.ac(或者叫configure.in)和Makefile.am。

所做的工作:

  • 修改了主目录下的configure.ac:
AC_CONFIG_FILES([Makefile extensions/GNUmakefile include/Makefile    iptables/Makefile iptables/xtables.pc    iptables/iptables.8 iptables/ip6tables.8    iptables/iptables-extensions.8.tmpl    libipq/Makefile libipq/libipq.pc    libiptc/Makefile libiptc/libiptc.pc    libiptc/libip4tc.pc libiptc/libip6tc.pc    librtc/Makefile librtc/librtc.pc    librtc/librt4c.pc librtc/librt6c.pc    libxtables/Makefile utils/Makefile    include/xtables-version.h include/iptables/internal.h])

7、8两行为加入的代码

  • 修改了主目录下的Makefile.am:
SUBDIRS          = libiptc libxtables librtcif ENABLE_DEVELSUBDIRS         += includeendifif ENABLE_LIBIPQSUBDIRS         += libipqendifSUBDIRS         += utils# Depends on libxtables:SUBDIRS         += extensions# Depends on extensions/libext.a:SUBDIRS         += iptables

即在SUBDIRS中加入了 librtc

  • 修改了include目录下的Makefile.am:
nobase_include_HEADERS += \    libiptc/ipt_kernel_headers.h libiptc/libiptc.h \    libiptc/libip6tc.h libiptc/libxtc.h libiptc/xtcshared.h \    librtc/librt4c.h librtc/librt6c.h

即在最后一行加入了librtc/librt4c.h librtc/librt6c.h

  • 在librtc文件夹下新建:Makefile.am 、librtc.pc、librt4c.pc、librt6c.pc。其中的语法内容与对应的libiptc的大同小异。

    有了上面的几步,就能够生成自己写的库:librt4c.la 、librt6c.la 、librtc.la,接下来在用到这些库的地方链接库即可。

  • 最后修改iptables文件夹下的Makefile.am文件:

xtables_multi_LDADD   += ../libiptc/libip4tc.la ../extensions/libext4.a ../librtc/librt4c.la...xtables_multi_LDADD   += ../libiptc/libip6tc.la ../extensions/libext6.a ../librtc/librt6c.la

即加入librt4c.la和librt6c.la两个库。因为这两个库是运行iptables.o/ip6tables.o 和 iptables-standalone.o/ip6tables-standalone.o所必须要链接的库,否则我们自己的写的函数是找不到定义的。

1 0