未定义的Windows引用_ftprintf

问题描述 投票:1回答:1

我刚刚通过Cygwin64将GCC安装到Windows上。我正在尝试在MyHandleError函数和_ftprintf中编译包含Windows (as shown here函数documented here的程序,但是,我得到一个未定义的引用。

例如:

#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

我错过了一面旗帜吗?

c winapi printf cygwin undefined-reference
1个回答
5
投票

如果它被声明,它将在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的一个更好的替代方法是使用Windows Subsystem for Linux - 这使得Cygwin在很大程度上已经过时了。

© www.soinside.com 2019 - 2024. All rights reserved.