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

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

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

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

Rust

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

Q&A

解決済

2回答

5391閲覧

rustでrustで作ったdllを呼ぶのってできるのでしょうか?

diemoss

総合スコア15

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

Rust

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

2グッド

0クリップ

投稿2018/05/25 11:05

編集2018/05/26 10:28

rustからrustで作ったdllの呼び方を知りたいのですがリンキングしようとするとfailedしちゃいます。
解決方法はあるのでしょうか?

ソース
ファイル構造 ・/ ├ callingdll/ │ ├ src/ │ │ └ main.rs │ ├ target/ │ │ └ debug/... │ ├ build.rs │ ├ Cargo.lock │ └ Cargo.toml └ dlltest/ ├ src/ │ └ lib.rs ├ target/ │ └ release/ │ ├ … │ ├ dlltest.d │ ├ dlltest.dll │ ├ dlltest.dll.d │ └ dlltest.dll.lib ├ Cargo.lock └ Cargo.toml

lang

1// dlltest/src/lib.rs 2#[no_mangle] 3pub extern "C" fn hello() { 4 println!("Hello!"); 5}

lang

1# dlltest/Cargo.toml 2[package] 3name = "dlltest" 4version = "0.1.0" 5authors = ["ユーザ名 <メールアドレス>"] 6 7[dependencies] 8 9[lib] 10name = "dlltest" 11crate-type = ["dylib"]

lang

1// callingdll/src/main.rs 2#[link(name = "dlltest", kind = "dylib")] 3extern "C" { 4 fn hello(); 5} 6 7fn main() { 8 unsafe { hello(); } 9}

lang

1// callingdll/build.rs 2fn main() { 3 println!(r"cargo:rustc-link-search=native=..\dlltest\target\release"); 4 //絶対パスも試しましたがダメでした。 5}

lang

1# callingdll/Cargo.toml 2[package] 3name = "callingc" 4version = "0.1.0" 5authors = ["ユーザ名 <メールアドレス>"] 6 7[dependencies] 8

rustc version: 1.28.0.nightly (71e87be38 2018-05-22)

ずっと調べててそれでもわからなかったので質問しました。
無知な質問をしていたらすみません…回答お願いします。

追記
callingdllでcargo run --verboseした時のエラーは下記の通りです。
LNK1181を見る限りファイル関係の問題なのでしょうか…

Compiling callingdll v0.1.0 (file:///C:/dlltesting/callingdll) Running `rustc --crate-name callingdll src\main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=3e5dd5e7b1b0c2ed -C extra-filename=-3e5dd5e7b1b0c2ed --out-dir C:\dlltesting\callingdll\target\debug\deps -C incremental=C:\dlltesting\callingdll\target\debug\incremental -L dependency=C:\dlltesting\callingdll\target\debug\deps -L native=..\dlltest\target\release` error: linking with `C:\Program Files (x86)\Microsoft Visual Studio\allnew\VC\Tools\MSVC\14.14.26428\bin\HostX64\x64\link.exe` failed: exit code: 1181 | = note: "C:\Program Files (x86)\Microsoft Visual Studio\allnew\VC\Tools\MSVC\14.14.26428\bin\HostX64\x64\link.exe" "/NOLOGO" "/NXCOMPAT" "/LIBPATH:C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "C:\dlltesting\callingdll\target\debug\deps\callingdll-3e5dd5e7b1b0c2ed.10ygozpgsu0ud2lu.rcgu.o" "C:\dlltesting\callingdll\target\debug\deps\callingdll-3e5dd5e7b1b0c2ed.1evrhzuhpd8ltllo.rcgu.o" "C:\dlltesting\callingdll\target\debug\deps\callingdll-3e5dd5e7b1b0c2ed.1y16o1qfye96o7m0.rcgu.o" "C:\dlltesting\callingdll\target\debug\deps\callingdll-3e5dd5e7b1b0c2ed.3rngp6bm2u2q5z0y.rcgu.o" "C:\dlltesting\callingdll\target\debug\deps\callingdll-3e5dd5e7b1b0c2ed.4oc10dk278mpk1vy.rcgu.o" "/OUT:C:\dlltesting\callingdll\target\debug\deps\callingdll-3e5dd5e7b1b0c2ed.exe" "C:\dlltesting\callingdll\target\debug\deps\callingdll-3e5dd5e7b1b0c2ed.crate.allocator.rcgu.o" "/OPT:REF,NOICF" "/DEBUG" "/NATVIS:C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\etc\intrinsic.natvis" "/NATVIS:C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\etc\liballoc.natvis" "/NATVIS:C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\etc\libcore.natvis" "/LIBPATH:C:\dlltesting\callingdll\target\debug\deps" "/LIBPATH:..\dlltest\target\release" "/LIBPATH:C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "dlltest.lib" "C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libstd-cac73b437b83476b.rlib" "C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libpanic_unwind-bcb5e04cac73fc66.rlib" "C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libunwind-5f2afd86d3924b70.rlib" "C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liblibc-24679fb279a08db9.rlib" "C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liballoc_system-b1fff24aa19ea685.rlib" "C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liballoc-f05424e8e00221e4.rlib" "C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libcore-d536cda45a971794.rlib" "C:\Users\ユーザー名\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libcompiler_builtins-dc70b1f5bd5e6342.rlib" "advapi32.lib" "ws2_32.lib" "userenv.lib" "shell32.lib" "msvcrt.lib" = note: Non-UTF-8 output: LINK : fatal error LNK1181: \x93\xfc\x97\xcd\x83t\x83@\x83C\x83\x8b \'dlltest.lib\' \x82\xf0\x8aJ\x82\xaf\x82\xdc\x82\xb9\x82\xf1\x81B\r\n error: aborting due to previous error error: Could not compile `callingdll`. Caused by: process didn't exit successfully: `rustc --crate-name callingdll src\main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=3e5dd5e7b1b0c2ed -C extra-filename=-3e5dd5e7b1b0c2ed --out-dir C:\dlltesting\callingdll\target\debug\deps -C incremental=C:\dlltesting\callingdll\target\debug\incremental -L dependency=C:\dlltesting\callingdll\target\debug\deps -L native=..\dlltest\target\release` (exit code: 101)
tatsuya6502, termoshtt👍を押しています

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

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

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

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

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

termoshtt

2018/05/26 07:43 編集

どのようなエラーが出力するか追記できますか?(dllの件は勘違いでした)
guest

回答2

0

自己解決

「dlltest.dll.libってなんや…はっ、もしや」と思い、

callingdllのmain.rsを

lang

1// callingdll/src/main.rs 2#[link(name = "dlltest.dll", kind = "dylib")] 3extern "C" { 4 fn hello(); 5} 6 7fn main() { 8 unsafe { hello(); } 9}

に書き換えるととりあえずはhello関数を呼べました。(正規の方法かわからないけど…汗)

ありがとうございました。

投稿2018/05/26 11:44

編集2018/05/26 13:07
diemoss

総合スコア15

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

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

0

すでに解決済みとのことなので補足です。エラーメッセージの文字化けしている行をShift_JISで読み直すと下記のようになりました。

text

1 = note: Non-UTF-8 output: LINK : fatal error LNK1181: 入力ファイル 'dlltest.lib' を開けません。

投稿2018/05/27 16:48

saturday06

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問