场景
工程添加ASIO源码,编译提示出错:
“signal”: 不是“`global namespace'”的成员
“signal”: 找不到标识符
相关代码出错位置:
void asio_signal_handler(int signal_number)
{
#if defined(ASIO_WINDOWS) \
|| defined(ASIO_WINDOWS_RUNTIME) \
|| defined(__CYGWIN__)
signal_set_service::deliver_signal(signal_number);
#else // defined(ASIO_WINDOWS)
// || defined(ASIO_WINDOWS_RUNTIME)
// || defined(__CYGWIN__)
int saved_errno = errno;
signal_state* state = get_signal_state();
signed_size_type result = ::write(state->write_descriptor_,
&signal_number, sizeof(signal_number));
(void)result;
errno = saved_errno;
#endif // defined(ASIO_WINDOWS)
// || defined(ASIO_WINDOWS_RUNTIME)
// || defined(__CYGWIN__)
#if defined(ASIO_HAS_SIGNAL) && !defined(ASIO_HAS_SIGACTION)
::signal(signal_number, asio_signal_handler);
#endif // defined(ASIO_HAS_SIGNAL) && !defined(ASIO_HAS_SIGACTION)
}
原因
通过VAssistX的Go按钮,查看其对应的头文件所在路径和文件名称。发现文件路径是C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt路径中找到声明文件,该函数声明在signal.h文件中
目的平台SDK选择8.1,但是8.1SDK没有安装对应的头文件,,但是系统安装了其他版本的SDK,在C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt路径中找到声明文件
可以安装8.1SDK的开发包,也可以直接引入头文件,毕竟仅仅是告知编译器其函数声明
解决方案
方案一:将工程SDK切换到10.0.10240.0
方案二:C/C++常规/附加目录添加C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt
通过VAssistX的Go按钮,查看其对应的头文件所在路径和文件名称。目的平台SDK选择8.1,但是8.1SDK没有安装对应的头文件,该函数声明在signal.h文件中,但是系统安装了其他版本的SDK,在C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt路径中找到声明文件