是否可以在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);
答案 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