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

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

ただいまの
回答率

90.52%

  • DLL

    83questions

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

  • Rust

    21questions

    Rustとは、Mozilla(モジラ)製の実験的な並列かつマルチパラダイムのプログラミング言語です。

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 412

diemoss

score 9

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
// dlltest/src/lib.rs
#[no_mangle]
pub extern "C" fn hello() {
    println!("Hello!");
}
# dlltest/Cargo.toml
[package]
name = "dlltest"
version = "0.1.0"
authors = ["ユーザ名 <メールアドレス>"]

[dependencies]

[lib]
name = "dlltest"
crate-type = ["dylib"]
// callingdll/src/main.rs
#[link(name = "dlltest", kind = "dylib")]
extern "C" {
    fn hello();
}

fn main() {
    unsafe { hello(); }
}
// callingdll/build.rs
fn main() {
    println!(r"cargo:rustc-link-search=native=..\dlltest\target\release");
    //絶対パスも試しましたがダメでした。
}
# callingdll/Cargo.toml
[package]
name = "callingc"
version = "0.1.0"
authors = ["ユーザ名 <メールアドレス>"]

[dependencies]


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)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • termoshtt

    2018/05/26 16:41 編集

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

    キャンセル

回答 2

check解決した方法

+4

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

callingdllのmain.rsを

// callingdll/src/main.rs
#[link(name = "dlltest.dll", kind = "dylib")]
extern "C" {
    fn hello();
}

fn main() {
    unsafe { hello(); }
}


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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    【Python】pip installができない

    前提・実現したいこと お世話になっております。 python初心者で説明に不備があるかもしれませんが、宜しくお願いいたします。 pythonでFactorization 

  • 解決済

    ページ上部にスクロール設定について

    ページの右下に、クリックするとページ上部に行く設定をしたのですが、スクロール位置を1000以下にすると非表示に設定をhead内に記述したのですが実行できません。 ご教授頂けますと嬉

  • 受付中

    レスポンシブルデザインについて

    ページ上部のメニューをクリックしたらスマホのサイトのようなメニューバーを表示させたいのですがどうすればよろしいでしょうか。 ちなみにこちらのサイトを参考にしました https://

  • 解決済

    レスポンシブデザインについて

    この画像の上部の油そば池袋とありますが幅を小さくしていくと 赤枠の箇所に油そば池袋と入れたいのですがどうすればよろしいでしょうか <!DOCTYPE html> <html

  • 受付中

    GithubAPIでユーザーIDからユーザー名を取得したい

    前提・実現したいこと GithubAPIでユーザーIDからユーザー名を取得したいです。 例: 101604208をhota1024のようにIDでユーザー名を取得したいです。

  • 受付中

    [CSS]floatが聞かず画像が隠れてしまいます...

    以下の画像のようにしたいのですが、floatが効かず画像が隠れてしまいます... 作成中の部分は「カートに登録しました」から上の「header」タグ内の部分です。 ] 以下は僕が作

  • 解決済

    phpが実行できません

    前提・実現したいこと Laravelを入れるためにComposerを入れようとしているのですがコンポーザーのセットアップ中にThe PHP exe file you specifi

  • 解決済

    Bootstrap / ハンバーガメニューが表示されない

    bootstrapにてハンバーガーメニューを作りたいと考えています。 しかし、クラスに規定したsmallサイズ以下になった際に、ハンバーガーが表示されません。原因を教えていただけれ

同じタグがついた質問を見る

  • DLL

    83questions

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

  • Rust

    21questions

    Rustとは、Mozilla(モジラ)製の実験的な並列かつマルチパラダイムのプログラミング言語です。