gpt4 book ai didi

c++ - 我该如何修复 MSVC 2005 错误 : unresolved external symbol __environ

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:21 25 4
gpt4 key购买 nike

在我的应用程序中,我需要直接访问 _environ 变量,因为我必须有类似 glibc unsetenv 的东西(你不能用 setenv 或 putenv 拥有它)。

这是我需要使用的代码:

//////////////////////
// unsetenv for WIN32, taken from libc source
int unsetenv(const char *name)
{
size_t len;
char **ep;

if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
{
return -1;
}

len = strlen (name);

ep = _environ;
while (*ep != NULL)
if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
{
/* Found it. Remove this pointer by moving later ones back. */
char **dp = ep;

do
dp[0] = dp[1];
while (*dp++);
/* Continue the loop in case NAME appears again. */
}
else
++ep;

return 0;
}

它一直运行良好,直到我们在某些系统上遇到一些 list 问题,所以我们尝试使用运行时库的静态版本(/MT 标志)。

现在,我收到这个错误:

unresolved external symbol __environ

我读了here在许多其他地方,这个变量已经过时和弃用。我想知道可能的解决方案。我也不能使用 _wenviron 变量,因为我们要支持 Windows 98。

在项目设置中,我明确地将其设置为使用 MBCS(即非 Unicode)。我在这里有点迷迷糊糊。还有什么我必须设置的吗?

只是为了测试,我也尝试了Unicode版本。 IE。这段代码:

int unsetenv(const wchar_t *name)
{
size_t len;
wchar_t **ep;

if (name == NULL || *name == '\0' || wcschr (name, '=') != NULL)
{
return -1;
}

len = wcslen (name);

ep = _wenviron;
while (*ep != NULL)
if (!wcsncmp (*ep, name, len) && (*ep)[len] == '=')
{
/* Found it. Remove this pointer by moving later ones back. */
wchar_t **dp = ep;

do
dp[0] = dp[1];
while (*dp++);
/* Continue the loop in case NAME appears again. */
}
else
++ep;

return 0;
}

我想知道为什么还要编译,因为我已明确将其设置为使用 MBCS 而不是 Unicode。但也许这意味着别的东西。 (有人可以在这里启发我吗?)

无论如何,这会导致这些错误:

1>AuxLib.obj : error LNK2001: unresolved external symbol __wenviron
1>ExtractInfo.obj : error LNK2001: unresolved external symbol __environ

AuxLib.obj 是带有这个 unsetenv() 的文件。所以比以前多了一个错误。

最佳答案

我不确定我是否理解,getenv_s 怎么了? ()?它是全局变量 __environ 的等效函数。它是多字节的,而不是 unicode,因此它应该可以在 VS 2005 编译器针对的所有平台上正常工作。 “_s”的意思是“安全”,这意味着该操作经过重新设计以减少黑客通过缓冲区溢出等方式进行利用。

关于c++ - 我该如何修复 MSVC 2005 错误 : unresolved external symbol __environ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2156665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com