mudflap没有“出口”

时间:2011-04-21 14:42:11

标签: c bash shell gcc

是否可以在C程序中设置变量MUDFLAP_OPTIONS,而不必从bash中导出?

myuser@linux:~$ export MUDFLAP_OPTIONS="-mode-check -viol-abort -internal-checking -heur-stack-bound -heur-start-end -verbose-violations -crumple-zone=32"
myuser@linux:~$ gcc -fmudflap -funwind-tables -lmudflap -rdynamic myprogram.c

我尝试了这个,但它不起作用:

static char *var = "MUDFLAP_OPTIONS=-mode-check -viol-abort -internal-checking -heur-stack-bound -heur-start-end -verbose-violations -crumple-zone=32";
putenv(var);

4 个答案:

答案 0 :(得分:2)

除了要启动的程序之外,您不必导出任何内容。像这样:

VARNAME=value ./program

所以对你的情况来说:

MUDFLAP_OPTIONS="-mode-check -viol-abort -internal-checking -heur-stack-bound -heur-start-end -verbose-violations -crumple-zone=32" ./myprogram

答案 1 :(得分:1)

Mudflap可能在调用main之前读取选项,因此在读取选项之前,您将没有机会将选项写入环境。

为什么不写一个包装器脚本来设置选项并调用你的可执行文件呢?

#!/bin/sh
export MUDFLAP_OPTIONS="-mode-check -viol-abort -internal-checking -heur-stack-bound -heur-start-end -verbose-violations -crumple-zone=32"
./my-executable

答案 2 :(得分:1)

这就是Makefiles存在的原因。 gcc不会为您执行您的程序,也不会从您的代码中获取任何环境变量。相反,你需要在Makefile中设置这种东西,如下所示:

export MUDFLAP_OPTIONS="-mode-check -viol-abort -internal-checking -heur-stack-bound -heur-start-end -verbose-violations -crumple-zone=32"

all:
    gcc -fmudflap -funwind-tables -lmudflap -rdynamic myprogram.c

将其另存为Makefile,只需输入make即可编译您的程序。您永远不需要记得再次导出该变量。

答案 3 :(得分:0)

您可以在make文件中添加与Mudflap相关的附加标志,如下所示

MUDFLAP_OPTIONS+=-fmudflap -fmudflapth -funwind-tables 

然后将其与-lmudflapth -rdynamic链接,如下所示

LDFLAGS+=-lmudflapth -rdynamic

注意:标志" -fmudflapth"仅当您的代码是多线程代码时才需要。如果不是,你可以避免那个标志,并在链接时使用" -lmudflap"而不是" -lmudflapth"

对于mudflap帮助使用MUDFLAP_OPTIONS="-help" ./myexecutablefile