英文:
Rust include DLL in release
问题
我正在Windows上尝试构建一个使用Rust的torch crate的项目的发布版本。
要安装它,我只需在Cargo.toml中添加如下内容:
[dependencies]
tch = "0.4.0"
如果我运行cargo run
,一切都正常。但是,如果我执行生成的.exe文件,我会收到以下错误信息:
torch_cu.dll未找到
c10.dll未找到
我尝试下载了一个已编译的libtorch版本,并将其/lib/中的所有内容包含到相同的文件夹中,现在出现错误:
找不到入口点
我尝试通过向我的项目添加.cargo/config.toml文件,并添加以下内容来进行静态链接:
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]
正如这个帖子建议的,但没有任何变化。
我无法理解tch的readme对此的解释。
如何处理这类问题?感谢任何帮助!我对这种链接错误的处理方法还很新手...
我尝试这些解决方案的沙箱项目链接在这里:https://github.com/titoco3000/torch_test
英文:
Im in windows, trying to build a release of a project that uses rust's torch crate.
To install it, I simply added to Cargo.toml:
[dependencies]
tch = "0.4.0"
If I do cargo run, it goes ok. But if I execute the produced .exe, I get these errors:
torch_cu.dll not found
c10.dll not found
I tried downloading a compiled version of libtorch and including everything from its /lib/ to the same folder, now with the error:
procedure entry point not found
I tried statically linking everything by adding a .cargo/config.toml to my project, with the contents:
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]
as suggested by this post, but nothing changed.
I wasnt able to understand what the tch's readme said about it either.
How do I work with these sort of issues?
Thanks for any help! Im new to working on these sort of linking errors...
The sandbox-project I was trying these solutions: https://github.com/titoco3000/torch_test
答案1
得分: 1
对于遇到与我相同问题的人...我认为tch-rs crate使用的libtorch版本可能不是最新的,因为仅仅将libtorch/lib文件夹中的所有dll文件复制粘贴到相同的文件夹中不起作用;但是将rust放置在\target\debug\build\torch-sys-cba3ef2adb59743a\out\libtorch\libtorch\lib\
路径下的所有dll文件复制到\target\debug\
路径下就可以了!这似乎是一个可怕的解决方案,但至少有效。
英文:
For anyone with the same issue as I was... I think the version of libtorch that the tch-rs crate uses is not the latest, because just copy-pasting all dlls from libtorch/lib to the same folder didnt work; but copying all dlls that were placed by rust at
\target\debug\build\torch-sys-cba3ef2adb59743a\out\libtorch\libtorch\lib\
to
\target\debug\
does the work! It seens like an terrible solution, but at least works.
答案2
得分: 0
如文档中所提到的,您可以在编译之前导出LIBTORCH_STATIC=1
环境变量来静态链接pytorch。完整文档在此。
至于target-feature=+crt-static
,它仅影响C运行时(crt
是它的缩写),因此它只会将Visual C++运行时链接到您的应用程序中,不会影响其他DLL。由于PyTorch不是C运行时的一部分,它不会以任何方式受到影响。
英文:
As mentioned in the docs, you can link pytorch statically by exporting LIBTORCH_STATIC=1
environment variable before compilation. Full docs here.
As for target-feature=+crt-static
, it affects only C Runtime (crt
is abbreviation from it) so it would just link Visual C++ Runtime into your application and wouldn't affect other DLLs. Since PyTorch is not a part of C Runtime, it wouldn't affect it any way.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论