Неопределенная ссылка на Windows _ftprintf - PullRequest
1 голос
/ 18 марта 2019

Я недавно установил GCC на Windows через Cygwin64 .Я пытаюсь скомпилировать программу, которая содержит функцию Windows _ftprintf (как показано здесь в функции MyHandleError и задокументировано здесь ), однако я получаю неопределенную ссылку.

Например:

#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

Я пропустил флаг или что-то еще

1 Ответ

5 голосов
/ 18 марта 2019

Если он вообще объявлен, он будет объявлен в tchar.h - откройте этот файл и проверьте. Однако, поскольку компоновщик также не может разрешить его, может показаться, что он вообще не определен в библиотеке.

Я бы не ожидал, что это сработает в Cygwin, который предназначен для поддержки API Linux / GNU в Windows - это неуместно, если вы нацеливаетесь на Windows / Microsoft API в любом случае. Более того, Cygwin использует кодировку UTF-8, а не кодировку Windows UTF-16, поэтому неудивительно, что поддержка широких символов Windows недоступна.

Если вы пишете специфичный для Windows код и хотите использовать GCC, вам будет лучше использовать MinGW - это компилятор GCC с библиотекой времени выполнения Windows C. Лучшей альтернативой Cygwin, если вы хотите (истинную) среду исполнения Linux, является использование Подсистема Windows для Linux - вещь, которая делает Cygwin в значительной степени устаревшей.

...