2011-12-03 54 views
3

更新:Eclipse是問題 - 它是從控制檯運行的。但我仍然喜歡它在Eclipse中工作。getenv()表示只有在Eclipse中運行時定義的環境變量纔是未定義的

我printenv輸出包含行:

PROTCAD3DIR=/home/brent/Desktop/protCAD 

但是從節目我試圖運行(在Eclipse),我得到的輸出:

Environment variable PROTCAD3DIR undefined. 
Please set it properly and re-execute the program. 

我搜索了這個消息來源並找到1結果:

string PCGeneralIO::getEnvironmentVariable(const string& _evname) 
{ 
    const char* convEVName = _evname.c_str(); 
    char* pEVString = getenv(convEVName); 
    if (pEVString == 0) 
    { cout << "Environment variable " << _evname << " undefined." << endl; 
     cout << "Please set it properly and re-execute the program." <<  endl;    
     exit(1); 
    }    
    string EVstring = charToString(pEVString);  
    return EVstring; 
} 

我很確定這是調用上述函數:

string evname = "PROTCAD3DIR"; 
string path = PCGeneralIO::getEnvironmentVariable(evname); 

那麼,什麼可能導致getenv()發現它爲undefined?

+0

您的評論你運行在同一個shell程序? – Beginner

+0

它有可能在不同的用戶環境下運行? – steve

+0

變量是否已導出? –

回答

1

在Eclipse的「運行配置」中檢查程序的「環境」選項卡。該列表應該是空的,應該檢查「追加環境到本地環境」。

編輯如果這沒有幫助,那麼很可能Eclipse沒有啓動缺少的變量。通過使用/usr/bin/printenv作爲程序創建一個新的「外部工具配置」來檢查。啓動這個外部工具並檢查輸出。如果沒有提到失蹤的變量,那麼你就可以準確地指定

我添加了一個文件(.configuration或類似的東西)中的定義和出口。

部分來自:-)

+0

我剛纔看到它在shell中工作,所以Eclipse確實是個問題。但是你描述的是我的實際情況。我剛纔看着它想知道我是否必須手動添加它。但我覺得我不應該這樣做,還有什麼建議嗎? – Rooster

+1

@bbarre也許你只是試圖從控制檯運行你的程序?只是爲了確保eclipse不會與env混淆。瓦爾? – Beginner

+0

@RomanB。它確實從控制檯工作。但我仍然希望Eclipse能夠自動提取我的envs。 – Rooster