未定义 Windows 引用 _ftprintf

Undefined Windows reference _ftprintf

我最近刚刚通过 Cygwin64. I am trying to compile a program that contains the Windows _ftprintf function (as shown here in the MyHandleError Function and documented here 将 GCC 安装到 Windows),但是,我得到了一个未定义的引用。

例如:

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

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

以下示例在编译为 gcc test.c 时产生以下错误:

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

我是不是少了一个旗帜什么的?

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

我不希望它在 Cygwin 中工作,Cygwin 旨在支持 Windows 上的 Linux/GNU API - 如果您的目标是 [=18=,则不合适] API无论如何。此外,Cygwin 使用 UTF-8 而不是 Windows UTF-16 编码,因此 Windows' 宽字符支持不可用也就不足为奇了。

如果您正在编写 Windows 特定代码并想使用 GCC,那么您最好使用 MinGW - 它是带有 Windows C 运行- 的 GCC 编译器时间图书馆。如果你想要一个 (true) Linux 执行环境,一个更好的替代 Cygwin 的方法是使用 Windows Subsystem for Linux - 这使得 Cygwin 在很大程度上已经过时了。