Я портирую программу с Linux на Windows, используя Mingw64. Он хорошо компилируется, но теперь я пытаюсь запустить тесты, и я получил несколько предупреждений, таких как implicit declaration of function 'pipe'" (and 'fcntl'), -fPIC ignored for target
... и более проблемных, таких как F_GETFD undeclared
(и F_SETFD
, O_NONBLOCK
).
Что я сделал на данный момент:
Я обнаружил, что все они должны быть включены в fcntl.h
и unistd.h
, которые правильно включены в файл .c. Я также мог найти их в Mingw64 (хотя есть еще один unistd.h
файл ...), поэтому я не получаю никакой ошибки в части «include». Однако ни один из этих файлов не определяет функцию канала, ни функцию fcntl, ни какую-либо F_GETFD и так далее.
Поскольку оба заголовка включают io.h
, я тоже посмотрел на io.h
. У него есть функция _pipe, но с 3 аргументами, тогда как у функции, используемой в моем файле .c, только 2, так что, вероятно, это не то же самое.
Я искал в сети, но у большинства людей с такой же проблемой просто не было заголовков. Я также нашел ответ, в котором говорилось о переписывании кода с использованием «эквивалентных» функций Windows, но сначала я не писал файлы c. Возможно, я смогу понять, что он делает, и, возможно, через некоторое время я смогу переписать его, но, поскольку у меня есть среда Mingw, предоставляющая заголовки, я думаю, что я смогу использовать эти функции pipe()
и fcntl()
. , И это было бы быстрее, чем переписать этот с ...
Что у меня есть:
Мне не разрешено показывать код, и, кроме того, я не думаю, что он будет чем-то полезен, поскольку единственная проблема состоит в том, что есть некоторые функции pipe (), fcntl () и F_GETFD, F_SETFD, O_NONCLOCK , написал в нем, что не может быть найдено в заголовочных файлах.
Заголовки Mingw64, их можно найти здесь:
https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/crt/unistd.h
https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/crt/fcntl.h
https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/crt/io.h
Что бы я хотел иметь:
Поскольку у меня все еще есть среда Linux, в которой эти файлы использовались, я взглянул на файлы fcntl.h и unistd.h; они определенно не одинаковы. В частности, в них правильно определены функции fcntl () и pipe (). И fcntl.h включает в себя другой fcntl-linux.h, который определяет F_GETFD и другие.
Как это можно получить в среде Mingw64?