Bindgen не выполняет кросс-компиляцию в ARM из-за stdint.h - PullRequest
1 голос
/ 26 февраля 2020

У меня есть библиотека C, которую я обертываю в ящик Rust, используя bindgen. Мой build.rs прост и очень похож на этот . Библиотека C использует внутренне pthreads.

В принципе, моя кросс-компиляция работает для чистых целей Rust, но в сочетании с библиотекой bindgen C перестает работать. Компиляция для моей хост-платформы (x86_64) работает нормально, но при попытке кросс-компиляции для arm-unknown-linux-gnueabihf (Raspberry Pi Zero) * я получаю следующие ошибки:

/home/andreas/rpi/rootfs/usr/include/stdint.h:43:9: error: unknown type name '__int_least8_t'
/home/andreas/rpi/rootfs/usr/include/stdint.h:44:9: error: unknown type name '__int_least16_t'
/home/andreas/rpi/rootfs/usr/include/stdint.h:45:9: error: unknown type name '__int_least32_t'
/home/andreas/rpi/rootfs/usr/include/stdint.h:46:9: error: unknown type name '__int_least64_t'
/home/andreas/rpi/rootfs/usr/include/stdint.h:49:9: error: unknown type name '__uint_least8_t'
/home/andreas/rpi/rootfs/usr/include/stdint.h:50:9: error: unknown type name '__uint_least16_t'
/home/andreas/rpi/rootfs/usr/include/stdint.h:51:9: error: unknown type name '__uint_least32_t'
/home/andreas/rpi/rootfs/usr/include/stdint.h:52:9: error: unknown type name '__uint_least64_t'
/home/andreas/rpi/rootfs/usr/include/stdio.h:39:10: fatal error: 'bits/types/__fpos_t.h' file not found
/home/andreas/rpi/rootfs/usr/include/stdint.h:43:9: error: unknown type name '__int_least8_t', err: true
/home/andreas/rpi/rootfs/usr/include/stdint.h:44:9: error: unknown type name '__int_least16_t', err: true
/home/andreas/rpi/rootfs/usr/include/stdint.h:45:9: error: unknown type name '__int_least32_t', err: true
/home/andreas/rpi/rootfs/usr/include/stdint.h:46:9: error: unknown type name '__int_least64_t', err: true
/home/andreas/rpi/rootfs/usr/include/stdint.h:49:9: error: unknown type name '__uint_least8_t', err: true
/home/andreas/rpi/rootfs/usr/include/stdint.h:50:9: error: unknown type name '__uint_least16_t', err: true
/home/andreas/rpi/rootfs/usr/include/stdint.h:51:9: error: unknown type name '__uint_least32_t', err: true
/home/andreas/rpi/rootfs/usr/include/stdint.h:52:9: error: unknown type name '__uint_least64_t', err: true
/home/andreas/rpi/rootfs/usr/include/stdio.h:39:10: fatal error: 'bits/types/__fpos_t.h' file not found, err: true
thread 'main' panicked at 'Unable to generate bindings: ()', src/libcore/result.rs:1188:5

Я использовал его со встроенными инструментами Rust и с обычным набором инструментов clang + gcc в моей системе и прекрасно компилируется изначально. Теперь я переключился на raspi-toolchain и установил CPATH для заголовочных файлов, которые я скачал с моего Raspberry Pi Zero, но проблема сохраняется (она меняется только с ошибок на основе pthread.h до stdint.h).

В build.rs я сначала запускаю cmake, а затем делаю следующее:

let dst = cmake::Config::new("../")
        //...
        .build();
println!("cargo:rustc-link-search=native={}", dst.display());

Как я могу продолжить?

то же самое происходит с целью armv7.

1 Ответ

0 голосов
/ 26 февраля 2020

Мне пришлось добавить больше заголовков из части Raspi:

/usr/include
/usr/include/arm-linux-gnueabihf
/usr/include/arm-linux-gnueabihf/sys
...