Visual Studio 2015:找不到 `char * * __cdecl __p__environ(void)`
Visual Studio 2015: Can't find `char * * __cdecl __p__environ(void)`
我正在尝试使用 VS2015 WIN64 构建 boost.process(前一段时间使用 VS2010 WIN32 和 WIN64 没有任何问题)。
link 人抱怨 char * * __cdecl __p__environ(void)
找不到:
process.obj : error LNK2019: symbole externe non résolu "char * * __cdecl __p__environ(void)" (?__p__environ@@YAPEAPEADXZ) référencé dans la fonction "public: static class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > __cdecl boost::process::self::get_environment(void)" (?get_environment@self@process@boost@@SA?AV?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@2@@std@@XZ)
这是导致此 link 问题的代码:
#if defined(BOOST_WINDOWS_API)
#ifdef GetEnvironmentStrings
#undef GetEnvironmentStrings
#endif
char *environ = ::GetEnvironmentStrings();
if (!environ)
boost::throw_exception(boost::system::system_error(boost::system::error_code(::GetLastError(), boost::system::get_system_category()), "boost::process::self::get_environment: GetEnvironmentStrings failed"));
try
{
char *env = environ;
while (*env)
{
std::string s = env;
std::string::size_type pos = s.find('=');
e.insert(boost::process::environment::value_type(s.substr(0, pos), s.substr(pos + 1)));
env += s.size() + 1;
}
}
catch (...)
{
::FreeEnvironmentStringsA(environ);
throw;
}
::FreeEnvironmentStringsA(environ);
#endif
将 char *environ = ::GetEnvironmentStrings();
替换为 char *environ = NULL;
并不能解决问题。评论整个集团解决了这个问题。
我真倒霉....
stdlib.h
有 #define environ _environ
(可能是 VS2015 中的新内容)...
在 boost.process 代码(或任何您喜欢的代码)中添加 #undef environ
或将 environ
替换为 environVar
修复编译....
注意:不关闭 OP,因为其他人试图编译 boost.process 可能会遇到同样的问题。
我正在尝试使用 VS2015 WIN64 构建 boost.process(前一段时间使用 VS2010 WIN32 和 WIN64 没有任何问题)。
link 人抱怨 char * * __cdecl __p__environ(void)
找不到:
process.obj : error LNK2019: symbole externe non résolu "char * * __cdecl __p__environ(void)" (?__p__environ@@YAPEAPEADXZ) référencé dans la fonction "public: static class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > __cdecl boost::process::self::get_environment(void)" (?get_environment@self@process@boost@@SA?AV?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@2@@std@@XZ)
这是导致此 link 问题的代码:
#if defined(BOOST_WINDOWS_API)
#ifdef GetEnvironmentStrings
#undef GetEnvironmentStrings
#endif
char *environ = ::GetEnvironmentStrings();
if (!environ)
boost::throw_exception(boost::system::system_error(boost::system::error_code(::GetLastError(), boost::system::get_system_category()), "boost::process::self::get_environment: GetEnvironmentStrings failed"));
try
{
char *env = environ;
while (*env)
{
std::string s = env;
std::string::size_type pos = s.find('=');
e.insert(boost::process::environment::value_type(s.substr(0, pos), s.substr(pos + 1)));
env += s.size() + 1;
}
}
catch (...)
{
::FreeEnvironmentStringsA(environ);
throw;
}
::FreeEnvironmentStringsA(environ);
#endif
将 char *environ = ::GetEnvironmentStrings();
替换为 char *environ = NULL;
并不能解决问题。评论整个集团解决了这个问题。
我真倒霉....
stdlib.h
有 #define environ _environ
(可能是 VS2015 中的新内容)...
在 boost.process 代码(或任何您喜欢的代码)中添加 #undef environ
或将 environ
替换为 environVar
修复编译....
注意:不关闭 OP,因为其他人试图编译 boost.process 可能会遇到同样的问题。