Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 未定义的Windows引用\u ftprintf_C_Winapi_Printf_Cygwin_Undefined Reference - Fatal编程技术网

C 未定义的Windows引用\u ftprintf

C 未定义的Windows引用\u ftprintf,c,winapi,printf,cygwin,undefined-reference,C,Winapi,Printf,Cygwin,Undefined Reference,我最近刚刚通过将GCC安装到Windows上。我试图编译一个程序,该程序在MyHandleError函数中包含Windows ftprintf函数,但是,我得到了一个未定义的引用 例如: #include <stdio.h> #include <tchar.h> #include <windows.h> void main(void){ _ftprintf(stderr, TEXT("Test Err. \n")); } 我是否缺少一个标志或什么?

我最近刚刚通过将GCC安装到Windows上。我试图编译一个程序,该程序在MyHandleError函数中包含Windows ftprintf函数,但是,我得到了一个未定义的引用

例如:

#include <stdio.h>
#include <tchar.h>
#include <windows.h>

void main(void){
    _ftprintf(stderr, TEXT("Test Err. \n"));
}

我是否缺少一个标志或什么?

如果它被声明,它将在tchar.h中声明-打开该文件并检查。但是,由于链接器也无法解析它,因此它似乎根本没有在库中定义

我不希望这在Cygwin中起作用,Cygwin打算在Windows上支持Linux/GNU API——如果您在任何情况下都以Windows/Microsoft API为目标,这是不合适的。此外,Cygwin使用UTF-8而不是Windows UTF-16编码,因此Windows的宽字符支持不可用也就不足为奇了


如果您正在编写特定于Windows的代码并希望使用GCC,那么最好使用MinGW——它是带有Windows C运行时库的GCC编译器。如果您想要一个真正的Linux执行环境,那么使用Cygwin的一个更好的替代方法是使用——这会使Cygwin在很大程度上过时。

如果声明了Cygwin,它将在tchar.h中声明——打开该文件并进行检查。但是,由于链接器也无法解析它,因此它似乎根本没有在库中定义

我不希望这在Cygwin中起作用,Cygwin打算在Windows上支持Linux/GNU API——如果您在任何情况下都以Windows/Microsoft API为目标,这是不合适的。此外,Cygwin使用UTF-8而不是Windows UTF-16编码,因此Windows的宽字符支持不可用也就不足为奇了


如果您正在编写特定于Windows的代码并希望使用GCC,那么最好使用MinGW——它是带有Windows C运行时库的GCC编译器。如果您想要一个真正的Linux执行环境,那么使用Cygwin的一个更好的替代方案是使用——这会使Cygwin在很大程度上过时。

这值得关注吗?@WeatherVane不是。我见过这个问题,但它并没有回答我上面的问题。我曾经用Sublime和gcc编译过以下函数,但我似乎不明白为什么我现在不能。Sublime文本编辑器与此无关,但也许您使用的是MinGW gcc而不是Cygwin?这很有趣吗?@WeatherVane不是。我见过这个问题,但它并没有回答我上面的问题。我曾经用Sublime和gcc编译过以下函数,但我似乎不明白为什么现在不能。Sublime文本编辑器与此无关,但也许您使用的是MinGW gcc而不是Cygwin?您完全正确!实际上我没有意识到Cygwin和MinGW之间的区别,所以我学到了一些新的东西。在我安装了MinGW并链接了bin文件之后,我就能够编译代码了。我特别针对的是Windows,所以需要MinGW。FWIW,TCHAR的东西只是Windows世界中的一堆宏——人们会期望ftprintf变成fprintf或fwprintf,这取决于构建如何配置UNICODE宏。在任何配置中,我们都不希望名称ftprintf能够保存到链接时间。@BenVoigt:这是一个很好的观点,因为链接器在库中查找ftprintf只是因为隐式声明-即使定义了ftprintf宏,也不存在这样的函数。您完全正确!实际上我没有意识到Cygwin和MinGW之间的区别,所以我学到了一些新的东西。在我安装了MinGW并链接了bin文件之后,我就能够编译代码了。我特别针对的是Windows,所以需要MinGW。FWIW,TCHAR的东西只是Windows世界中的一堆宏——人们会期望ftprintf变成fprintf或fwprintf,这取决于构建如何配置UNICODE宏。在任何配置中,我们都不希望名称ftprintf保存到链接时间。@BenVoigt:这是一个很好的观点,因为链接器只是因为隐式声明才在库中查找ftprintf-即使定义了ftprintf宏,也不存在这样的函数。
test.c: In function 'main':
test.c:6:5: warning: implicit declaration of function '_ftprintf'; did you mean '__eprintf'? [-Wimplicit-function-declaration]
 _ftprintf(stderr, TEXT("Test Err. \n"));
 ^~~~~~~~~
 __eprintf
/cygdrive/c/Users/Dan/AppData/Local/Temp/ccEa2phm.o:test.c:(.text+0x21): undefined reference to `_ftprintf'
/cygdrive/c/Users/Dan/AppData/Local/Temp/ccEa2phm.o:test.c:(.text+0x21): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `_ftprintf'
collect2: error: ld returned 1 exit status