对memcpy_s的未定义引用
我正在尝试修复对memcpy_s()
错误的未定义引用。 我在我的文件中包含了string.h
, memcpy()
函数运行正常,我也尝试过包含memory.h
。 我在x64 Windows 7上并使用gcc 4.8.1进行编译。
#include #include #include void doMemCopy(char* buf, size_t buf_size, char* in, int chr) { memcpy_s(buf, buf_size, in, chr); }
buf
内存已在main函数中分配,该函数调用doMemCpy(buf, 64, in, bytes)
。 in
是从标准输入读取的字符串
来自cmd终端的确切错误:
未定义引用“memcpy_s”collect2.exe:错误:ld返回1退出状态
我从来没有用过这个,但AFAIK,你需要添加
#define __STDC_WANT_LIB_EXT1__ 1
之前
#include
使用memcpy_s()
。
据我所知,GCC 4.8不包括函数memcpy_s
或任何其他_s边界检查函数。 这些function在ISO 9899:2011附录K中定义,它们是可选的实施。 在使用它们之前,您必须检查是否定义了__STDC_LIB_EXT1__
。
这些function最初由微软实施,许多方面反对将它们纳入标准。 我认为主要的反对意见是函数完成的error handling涉及在线程之间共享的全局回调句柄,但它们也非常低效。
Carlos O’Donell和Martin Sebor将在附录K – Bounds Checking Interfaces的更新现场体验中进一步阅读。