брызговик без "вывоза" - PullRequest
       19

брызговик без "вывоза"

1 голос
/ 21 апреля 2011

Возможно ли установить переменную MUDFLAP_OPTIONS внутри программы на C вместо необходимости экспортировать ее из 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 ]

2 голосов
/ 21 апреля 2011

Вам не нужно ничего экспортировать, кроме программы, которую вы хотите запустить.Вот так:

VARNAME=value ./program

Итак, для вашего случая:

MUDFLAP_OPTIONS="-mode-check -viol-abort -internal-checking -heur-stack-bound -heur-start-end -verbose-violations -crumple-zone=32" ./myprogram
1 голос
/ 21 апреля 2011

Вот почему существуют Make-файлы.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 для компиляции вашей программы.Вам никогда не придется помнить, чтобы снова экспортировать эту переменную.

1 голос
/ 21 апреля 2011

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
0 голосов
/ 08 августа 2014

Вы можете добавить дополнительные флаги, связанные с Mudflap, в ваш файл make, как показано ниже

MUDFLAP_OPTIONS+=-fmudflap -fmudflapth -funwind-tables 

Затем связать его с -lmudflapth -rdynamic, как показано ниже

LDFLAGS+=-lmudflapth -rdynamic

Примечание: флаг "-fmudflapth "требуется, только если ваш код является многопоточным.Если нет, то вы можете избежать этого флага и при связывании использовать «-lmudflap» вместо «-lmudflapth»

. Для справки «flaflap» используйте MUDFLAP_OPTIONS="-help" ./myexecutablefile

...