getenv()在MySQL UDF中返回null

时间:2014-03-19 17:49:11

标签: mysql c++11 environment-variables getenv

我遇到了C / C ++函数 getenv()的奇怪问题。该函数在Linux系统(Linux Mint 16 Cinnamon 64bit)上的MySQL UDF中使用。我通过编辑文件 / etc / environment 在系统范围内设置了JAVA_HOME环境变量,并在使用 env 命令,用户和root用户。代码很简单,如下所示:

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系统上工作,我必须稍微修改代码并用 getenv()替换 GetEnvironmentVariableA()函数即可。我无法弄清问题是什么。任何指针将不胜感激。

编辑:我已经测试了&#34; HOME&#34;的结果。变量和输出奇怪地 / etc / mysql / 而不是 / root / ,正如我所期望的那样。 UDF是否有自己的环境或类似的东西?

0 个答案:

没有答案