Getenv () программы на C возвращает ноль, несмотря на то, что работает эхо терминала - PullRequest
0 голосов
/ 22 октября 2019

Я прочитал все остальные посты с таким же заголовком, но я не на встроенной системе, и у меня правильно установлены мои включения и переменная окружения. Работая на RHEL 7.5, моя программа с getenv не работала, поэтому я создал приложение C с простой функциональностью печати переменной среды JAVA_HOME. Он возвращает null из программы на C, но переменная окружения установлена ​​(была установлена ​​постоянно) и отлично читает в моем терминале замазки. Это именно то, что я бегу (только сокращенные пути):

C:

#include <stdio.h>
#include <stdlib.h>

int main () {
   printf("JAVA HOME : %s\n", getenv("JAVA_HOME"));

   return(0);
}

makefile:

CC=gcc
CFLAGS=-c -Wall -I/path/to/includes
BIN=/path/to/bin

INCLUDE=/path/to/includes

default : $(BIN)/testEnv


testEnv.o : testEnv.c
    $(CC) $(CFLAGS) testEnv.c

#------------ Make testEnv-------------------
$(BIN)/testEnv: testEnv.o
    $(CC) -o $@  \
    testEnv.o

Терминал:

>bin/testEnv
JAVA HOME : (null)
>echo $JAVA_HOME
/path/to/java

У кого-нибудь есть что-нибудь новое, что я должен проверить или узнать, в чем проблема? Спасибо.

1 Ответ

2 голосов
/ 22 октября 2019

Ваша JAVA_HOME переменная скорее всего является переменной оболочки, а не экспортированной. Обязательно экспортируйте его перед запуском приложения из этой оболочки:

export JAVA_HOME
...