Вы не предоставили достаточно информации для полного ответа, но мне кажется, я знаю одну о ваших проблемах: функции open
, read
, write
, close
и т. Д.У них есть подчеркивания перед их именами в Windows, но они не в Linux (или любом другом Unix в этом отношении).При компиляции файлов .c
компилятор должен был предупредить вас об этом - если это не так, включите предупреждения!В любом случае, вам придется удалить все эти подчеркивания.Я бы порекомендовал заголовочный файл, который выполняет что-то вроде следующего:
#ifdef _WIN32
#define open(p, f, m) _open(p, f, m)
#define read(f, b, n) _read(f, b, n)
#define write(f, b, n) _write(f, b, n)
#define close(f) _close(f)
/* etc */
#endif
, а затем использует только имена без подчеркивания в вашем фактическом коде.
Кроме того, -l
параметры (такие каккак -lm
) должен быть помещен после всех объектных файлов.Нет необходимости указывать -lc
(и это может вызвать проблемы при слишком таинственных обстоятельствах).