我刚刚通过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
我错过了一面旗帜吗?
如果它被声明,它将在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在很大程度上已经过时了。