1

C/C++ 関数getenv()で奇妙な問題が発生しています。この関数は、Linux システム (Linux Mint 16 Cinnamon 64 ビット) 上の MySQL UDF 内で使用されます。/etc/environmentファイルを編集して JAVA_HOME 環境変数をシステム全体に設定しました。ユーザーとルートの両方でenvコマンドを使用すると、他のすべての変数とともにシェルに出力されます。コードは単純で、次のようになります。

char *javaHome;   
javaHome = getenv("JAVA_HOME");
if (!javaHome) {
    char *m = "Error getting JAVA_HOME variable";
    strcpy(message, m);
    return 1;
}

UDF は条件で永続的にエラー メッセージを返すため、javaHome変数は常に null です。別の単純な C++ プログラムを作成し、cpp ファイルをコンパイル済み UDF ライブラリが存在する MySQL プラグイン ディレクトリ ( /usr/lib/mysql/plugin ) にドロップしました。

#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {        
char *javaHome = getenv("JAVA_HOME");
cout << javaHome;
return 0;
} 

このコードは、期待どおりに変数の値、つまり JRE へのパスを返します。UDF コードは私の Windows システムでは正常に動作しますが、Unix システムで動作させるには、コードを少し変更し、GetEnvironmentVariableA()関数をgetenv()に置き換える必要がありました。何が問題なのかわかりません。任意のポインタをいただければ幸いです。

編集:「HOME」変数の結果をテストしたところ、出力は不思議なことに、 /root/ではなく/etc/mysql/でした。UDF には独自の環境などがありますか?

4

0 に答える 0