質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

バインド

バインドは、一定の方法で複数の事柄が関連付けられている状態を呼びます。また、そのような関連付けを実行する機能自体を指す事もあります。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

1回答

621閲覧

bindgen.rsを用いてcuda.hをバインドのやり方について

BoKuToTuZenU

総合スコア51

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

バインド

バインドは、一定の方法で複数の事柄が関連付けられている状態を呼びます。また、そのような関連付けを実行する機能自体を指す事もあります。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2021/07/15 08:05

編集2021/07/15 08:06

やりたいこと

bindgenを用いて、cuda.hやcuda_runtime.hをbindしたいです。

問題

cargo buildを行うと、

error: Wrong output in build script of `cuda-sys v0.1.0 (path/to/cuda-sys)`: `cargo:runstc-link-cuda.h`

とエラーが出ます。
私が書いたコードがどのようにwrong outputしているのかがわかりません。

書いたコードについて

bindするクレートとして、cuda-sysを作成しました。

├── build.rs ├── Cargo.lock ├── Cargo.toml ├── src │ ├── cuda.rs │ └── lib.rs └── wrapper.h

のようなファイル構造を用意しました。
それれぞれ中身は、

wrapper.h

wrapper.h

1#include "cuda.h"

build.rs

rust

1extern crate bindgen; 2 3use std::path::PathBuf; 4 5fn main() { 6 println!("cargo:runstc-link-cuda.h"); 7 8 let bindings = bindgen::Builder::default() 9 // .header("/usr/local/cuda/include/cuda.h") 10 .raw_line(r" 11//! Defines the FFI for CUDA. 12//! 13#![allow(non_camel_case_types)] 14#![allow(non_snake_case)] 15#![allow(non_upper_case_globals)] 16 ") 17 .clang_arg("-I") 18 .clang_arg("/usr/local/cuda/include".to_string()) 19 .header("wrapper.h") 20 .generate() 21 .expect("Unable to generate bindings"); 22 23 let out_path = PathBuf::from("src/").join("cuda.rs"); 24 bindings 25 .write_to_file(out_path) 26 .expect("Unable to write"); 27 28}

Cargo.toml

[package] name = "cuda-sys" version = "0.1.0" edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] libc="*" [build-dependencies] bindgen="*"

lib.rs

rust

1include!("cuda.rs"); 2 3#[cfg(test)] 4mod tests { 5 #[test] 6 fn it_works() { 7 assert_eq!(2 + 2, 4); 8 } 9}

Rustのバージョン

$ rustc --version > rustc 1.53.0 (53cb7b09b 2021-06-17)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Wrong output in build script of ... cargo:runstc-link-cuda.h

正しくない出力というのは、このcargo:runstc-link-cuda.hという文字列のことを指しています。

ビルドスクリプト(build.rs)がprintln!などを使って標準出力へ出力した文字列は、Cargoに対する命令として使われます。エラーになった文字列はここで出力されています。

build.rs

rust:

1fn main() { 2 println!("cargo:runstc-link-cuda.h");

Cargo Bookの この節 によると、cargo:runstc-link-という命令はないようです。そのためにエラーになっています。

bindgenの こちらのチュートリアル に従って、以下のように書きかえてみてください。

build.rs

rust

1fn main() { 2 // Tell cargo to invalidate the built crate whenever the wrapper changes 3 println!("cargo:rerun-if-changed=wrapper.h");

私の環境にはCUDAがないので自分では試していません。他にもエラーが出るかもしれませんが、とりあえずwrong outputのエラーについてはこれで解決すると思います。

投稿2021/07/15 10:05

編集2021/07/15 10:07
tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問