我遇到了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是否有自己的环境或类似的东西?