我试图修复对memcpy_s()
错误的未定义引用。我在我的文件中包含了string.h
,memcpy()
函数运行良好,我也尝试过包含memory.h
。我在x64 Windows 7上,用gcc 4.8.1编译。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void doMemCopy(char* buf, size_t buf_size, char* in, int chr) {
memcpy_s(buf, buf_size, in, chr);
}
buf
的内存已在主函数中分配,该函数调用doMemCpy(buf, 64, in, bytes)
。in
是从标准输入读取的字符串。
来自cmd终端的准确错误:
未定义的对"memcpy_s“regt2.exe的引用:错误: ld返回了1个退出状态
发布于 2016-10-20 19:14:34
据我所知,GCC 4.8不包括函数memcpy_s
或任何其他_s边界检查函数。这些职能是在ISO 9899:2011附件K中界定的,是可供选择执行的。在使用它们之前,您必须检查是否定义了__STDC_LIB_EXT1__
。
这些功能最初是由Microsoft实现的,许多方面反对将它们包括在标准中。我认为主要的反对意见是,这些函数所做的错误处理涉及一个全局回调句柄,该句柄在线程之间共享,但它们也非常低效。
进一步的阅读可从卡洛斯奥多内尔和马丁塞布尔在更新附件K-边界检查接口的现场经验。
发布于 2015-07-07 20:03:34
我从来没有用过这个,但是AFAIK,你需要添加
#define __STDC_WANT_LIB_EXT1__ 1
在此之前
#include <string.h>
使用memcpy_s()
。
https://stackoverflow.com/questions/31278172
复制相似问题