gpt4 book ai didi

linux - 在自定义工具中使用 traceroute 时出现编译问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:45 27 4
gpt4 key购买 nike

为了完成我的硕士论文,我正在开发一种工具来测试和评估多路径网络的公式。

我将使用 traceroute 工具通过向它传递 -s 标志、源 IP 和目标 IP 来跟踪两个多宿主主机之间的网络。我有多个源 IP 和目标 IP。所以traceroute会被执行多次。

我不擅长编译。从网站下载的 traceroute-2.1.0 代码 https://sourceforge.net/projects/traceroute/files/traceroute/有以下“make”相关文件。

  • 生成文件
  • make.defines
  • 制定规则
  • 默认规则

我已经将我的更改应用到 traceroute.c 中的代码,我可以通过“make”和“make install”正确编译它。但是这些更改是针对系统的 traceroute 工具进行的(很明显)。

我想要实现的是,为其取一个新名称,例如“mytrace”而不是“traceroute”。所以它不会与 traceroute 工具冲突,我可以同时使用这两种工具。在 cmd 行中使用“traceroute”调用和其他使用“mytrace”调用。

问题是:为了实现它,我必须在重新编译之前进行哪些更改。

这里是文件“makefile”的代码。

#   Global Makefile.
# Global rules, targets etc.
#
# See Make.defines for specific configs.
#


srcdir = $(CURDIR)

override TARGET := .MAIN

dummy: all

include ./Make.rules


targets = $(EXEDIRS) $(LIBDIRS) $(MODDIRS)


# be happy, easy, perfomancy...
.PHONY: $(subdirs) dummy all force
.PHONY: depend indent clean distclean libclean release store libs mods


allprereq := $(EXEDIRS)

ifneq ($(LIBDIRS),)
libs: $(LIBDIRS)
ifneq ($(EXEDIRS),)
$(EXEDIRS): libs
else
allprereq += libs
endif
endif

ifneq ($(MODDIRS),)
mods: $(MODDIRS)
ifneq ($(MODUSERS),)
$(MODUSERS): mods
else
allprereq += mods
endif
ifneq ($(LIBDIRS),)
$(MODDIRS): libs
endif
endif

all: $(allprereq)

depend install: $(allprereq)

$(foreach goal,$(filter install-%,$(MAKECMDGOALS)),\
$(eval $(goal): $(patsubst install-%,%,$(goal))))


what = all
depend: what = depend
install install-%: what = install

ifneq ($(share),)
$(share): shared = yes
endif
ifneq ($(noshare),)
$(noshare): shared =
endif


$(targets): mkfile = $(if $(wildcard $@/Makefile),,-f
$(srcdir)/default.rules)

$(targets): force
@$(MAKE) $(mkfile) -C $@ $(what) TARGET=$@

force:


indent:
find . -type f -name "*.[ch]" -print -exec $(INDENT) {} \;

clean:
rm -f $(foreach exe, $(EXEDIRS), ./$(exe)/$(exe)) nohup.out
rm -f `find . \( -name "*.[oa]" -o -name "*.[ls]o" \
-o -name core -o -name "core.[0-9]*" -o -name a.out \) -print`

distclean: clean
rm -f `find $(foreach dir, $(subdirs), $(dir)/.) \
\( -name "*.[oa]" -o -name "*.[ls]o" \
-o -name core -o -name "core.[0-9]*" -o -name a.out \
-o -name .depend -o -name "_*" -o -name ".cross:*" \) \
-print`


libclean:
rm -f $(foreach lib, $(LIBDIRS), ./$(lib)/$(lib).a ./$(lib)/$(lib).so)


# Rules to make whole-distributive operations.
#

STORE_DIR = $(HOME)/pub

release release1 release2 release3:
@./chvers.sh $@
@$(MAKE) store

store: distclean
@./store.sh $(NAME) $(STORE_DIR)

最佳答案

我写信给该工具的程序员,他的解决方案对我有用。在这里:

只需将子目录“traceroute”重命名为另一个名称,比如“mytrace”。IOW,您将拥有“include、libsupp、mytrace”而不是“include、libsupp、traceroute”。

此外,如果您打算创建一个带有更改名称等的 tarball,您似乎必须在 Make.defines 文件中将“NAME = traceroute”重命名为“NAME = mytrace”。此致,德米特里·布茨科伊

关于linux - 在自定义工具中使用 traceroute 时出现编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46957329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com