我正在尝试修复对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的更新现场体验中进一步阅读。
以上就是c/c++开发分享对memcpy_s的未定义引用相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560012.html