对memcpy_s的未定义引用
我正在尝试修复对对memcpy_s的未定义引用,c,memcpy,undefined-reference,c11,tr24731,C,Memcpy,Undefined Reference,C11,Tr24731,我正在尝试修复对memcpy\u s()错误的未定义引用。我已经在文件中包含了string.h,并且memcpy()函数工作正常,我还尝试了包含memory.h。我在x64 Windows 7上,使用GCC4.8.1进行编译 #include <stdlib.h> #include <stdio.h> #include <string.h> void doMemCopy(char* buf, size_t buf_size, char* in, int ch
memcpy\u s()
错误的未定义引用。我已经在文件中包含了string.h
,并且memcpy()
函数工作正常,我还尝试了包含memory.h
。我在x64 Windows 7上,使用GCC4.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,大小\u t buf\u大小,字符*in,整数chr){
memcpy_s(基本尺寸、基本尺寸、英寸、厘米);
}
已在主函数中为
buf
分配了内存,该函数调用domecpy(buf,64,in,bytes)
<代码>在中是从标准输入读取的字符串
来自cmd终端的确切错误:
对“memcpy_s”collect2.exe的未定义引用:错误:ld返回1个退出状态
我从来没用过这个,不过你需要补充一下
#define __STDC_WANT_LIB_EXT1__ 1
以前
#include <string.h>
#包括
使用
memcpy_s()
GCC 4.8不包括函数memcpy_s
,或据我所知的任何其他边界检查函数。这些功能在ISO 9899:2011附录K中有定义,它们是可选的。在使用它们之前,您必须检查是否定义了\uuuuuu STDC\u LIB\u EXT1\uuuu
这些功能最初是由Microsoft实现的,许多方面都反对将它们包含在标准中。我认为主要的反对意见是,函数所做的错误处理涉及线程之间共享的全局回调句柄,但它们的效率也相当低
Carlos O'Donell和Martin Sebor in可进一步阅读。是否已分配
buf
和in
?您得到的确切错误是什么?显示调用函数buf
的上下文,该函数已在main()函数中分配,而in
是从标准输入读取的字符串。我得到的错误是未定义对“memcpy_s”collect2.exe的引用:错误:ld返回1退出状态
应向问题添加新信息。请将您的评论中的信息添加到您的问题中。@jhinzmann不是必需的。它与实际问题无关。它是否试图链接到错误的版本?这是否也需要-std=c11
编译选项?否。这是针对C11的。引用上面的引用,作为所有边界检查函数,只有在实现定义了STDC_LIB_EXT1并且用户在包含string.h之前将STDC_WANT_LIB_EXT1定义为整数常量1时,memcpy_s才保证可用。你所说的定义应该在#include
一行之前,我在#include
之前定义了STDC\u WANT\u LIB\u EXT1\uuu1,我仍然得到同样的错误。当我尝试用-std=c11
编译它时,我得到警告:函数“memcpy_s”[-Wimplicit function declaration]
的隐式声明除了未定义的引用错误之外,我没有访问同一个编译器的权限,但该错误似乎不太可能与头有关,定义甚至编译,因为这是一个链接时错误,表示库中缺少它(可能是因为没有编译以支持它)。当然,除非memcpy_s()是静态内联函数或宏。