对memcpy_s的未定义引用

我正在尝试修复对memcpy_s()错误的未定义引用。 我在我的文件中包含了string.hmemcpy()函数运行正常,我也尝试过包含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的更新现场体验中进一步阅读。