hyd*_*one 4 c memcpy tr24731 undefined-reference c11
我正在尝试修复memcpy_s()错误的未定义引用。我已经将其包含string.h在文件中,并且该memcpy()功能可以正常运行,并且我还尝试了include 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);
}
Run Code Online (Sandbox Code Playgroud)
buf已在主函数调用中分配了的内存doMemCpy(buf, 64, in, bytes)。in是从标准输入读取的字符串
来自cmd终端的确切错误:
未定义对“ memcpy_s” collect2.exe的引用:错误:ld返回1退出状态
我从来没有用过这个,但是 AFAIK,你需要添加
#define __STDC_WANT_LIB_EXT1__ 1
Run Code Online (Sandbox Code Playgroud)
前
#include <string.h>
Run Code Online (Sandbox Code Playgroud)
使用memcpy_s().
memcpy_s据我所知,GCC 4.8不包含function 或任何其他_s边界检查函数。这些功能在ISO 9899:2011附录K中定义,并且是可选的实现。使用它们之前,必须检查是否__STDC_LIB_EXT1__已定义。
这些功能最初是由Microsoft实现的,许多团体都反对将它们包含在标准中。我认为主要的反对意见是,由函数完成的错误处理涉及线程之间共享的全局回调句柄,但它们的效率也很低。
卡洛斯·奥多内尔(Carlos O'Donell)和马丁·塞伯(Martin Sebor)可以从附件K —边界检查接口的最新实地经验中获得更多阅读信息。