Как использовать Nix для создания программного обеспечения, использующего time.h на macOS

#c #macos #nix

#c #macos #nix

Вопрос:

У меня есть некоторое программное обеспечение, написанное на C. Он отлично компилируется, но когда я пытаюсь упаковать его как пакет Nix, компилятор выдает ошибку

неизвестное имя типа ‘clockid_t’; вы имели в виду ‘clock_t’?

Вот MCVE:

default.nix:

 with import <nixpkgs> {};
stdenv.mkDerivation {
  name = "asdf";
  src = lib.cleanSource ./.;
}
  

main.c:

 #include <stdio.h>
#include <time.h>

clockid_t x;

int main() { return 0; }
  

makefile:

 all:
    cc main.c -o main
  

Помещение этих файлов в каталог и выполнение nix-build приводит к такому результату:

 these derivations will be built:
  /nix/store/8djs648bj3bqrn0bz51hmf79wdifks2b-asdf.drv
building '/nix/store/8djs648bj3bqrn0bz51hmf79wdifks2b-asdf.drv'...
unpacking sources
unpacking source archive /nix/store/zm8c46i44hp2gr9gc7n41f3vg02jh2v5-asdf
source root is asdf
patching sources
configuring
no configure script, doing nothing
building
build flags: SHELL=/nix/store/g9cis4hsnzcjkzfa77nif7kzq9bsqmpg-bash-4.4-p23/bin/bash
cc main.c -o main
main.c:4:1: error: unknown type name 'clockid_t'; did you mean 'clock_t'?
clockid_t x;
^~~~~~~~~
clock_t
/nix/store/l77bg1s15f0wgjf4c12fc29ghvjbswwy-Libsystem-osx-10.11.6/include/sys/_types/_clock_t.h:30:33: note: 'clock_t' declared here
typedef __darwin_clock_t        clock_t;
                                ^
1 error generated.
make: *** [makefile:2: all] Error 1
builder for '/nix/store/8djs648bj3bqrn0bz51hmf79wdifks2b-asdf.drv' failed with exit code 2
error: build of '/nix/store/8djs648bj3bqrn0bz51hmf79wdifks2b-asdf.drv' failed
  

Но когда я просто запускаю make , ошибки нет. Как я могу это исправить?

Ответ №1:

Похоже, это ошибка компиляции, которая была исправлена в OS X начиная с 10.11.6, которую вы используете при создании.

Обновление до более нового nixpkgs должно решить проблему. Nixpkgs 18.09 должно быть достаточно.

Комментарии:

1. Я использую OS X 10.13 и nixpkgs 19.09.