esp-rs / esp-idf-hal

embedded-hal implementation for Rust on ESP32 and ESP-IDF
https://docs.esp-rs.org/esp-idf-hal/
Apache License 2.0
439 stars 169 forks source link

Cannot open libclang.dll, LoadLibraryExW failed #465

Open MiniMinerX opened 1 month ago

MiniMinerX commented 1 month ago

I have followed all the installation instructions, making sure my enviornment variables are set and correct. I cannot build because the .dll file is not being opened and I do not know why. I've treid working at this for hours now with not much online to help. Here is my tomls: [package] name = "espt12" version = "0.1.0" authors = ["MiniMinerX jessehrupe@gmail.com"] edition = "2021" resolver = "2" rust-version = "1.79"

[[bin]] name = "espt12" harness = false # do not use the built in cargo test harness -> resolve rust-analyzer errors

[profile.release] opt-level = "s"

[profile.dev] debug = true # Symbols are nice and they don't increase the size on Flash opt-level = "z"

[features] default = ["std", "embassy", "esp-idf-svc/native"]

pio = ["esp-idf-svc/pio"] std = ["alloc", "esp-idf-svc/binstart", "esp-idf-svc/std"] alloc = ["esp-idf-svc/alloc"] nightly = ["esp-idf-svc/nightly"] experimental = ["esp-idf-svc/experimental"] embassy = ["esp-idf-svc/embassy-sync", "esp-idf-svc/critical-section", "esp-idf-svc/embassy-time-driver"]

[dependencies] log = { version = "0.4", default-features = false } esp-idf-svc = { version = "0.49", default-features = false }

[build-dependencies] embuild = "0.32.0" and then this toml: [toolchain] channel = "esp" and then finally: [build] target = "xtensa-esp32-espidf"

[target.xtensa-esp32-espidf] linker = "ldproxy" runner = "espflash flash --monitor" # Select this runner for espflash v3.x.x rustflags = [ "--cfg", "espidf_time64"] # Extending time_t for ESP IDF 5: https://github.com/esp-rs/rust/issues/110

[unstable] build-std = ["std", "panic_abort"]

[env] MCU="esp32" RUST_BACKTRACE = "full"

Note: this variable is not used by the pio builder (cargo build --features pio)

ESP_IDF_VERSION = "v5.2.2"

Workaround for https://github.com/esp-rs/esp-idf-template/issues/174

CRATE_CC_NO_DEFAULTS = "1"

I ran these commands in the terminal to source the paths: > $Env:LIBCLANG_PATH = "C:\Users\minim.rustup\toolchains\esp\xtensa-esp32-elf-clang\esp-clang\bin\libclang.dll"

$Env:PATH = "C:\Users\minim.rustup\toolchains\esp\xtensa-esp32-elf-clang\esp-clang\bin;" + $Env:PATH $Env:PATH = "C:\Users\minim.rustup\toolchains\esp\xtensa-esp-elf\bin;" + $Env:PATH PS C:\espt12>

Here is my output after doing cargo build --release

Note the line: Unable to find libclang: "the libclang shared library at C:\Users\minim\.rustup\toolchains\esp\xtensa-esp32-elf-clang\esp-clang\bin\libclang.dll could not be opened: LoadLibraryExW failed"

PS C:\espt12> cargo build --release Compiling bindgen v0.69.4 Compiling embuild v0.32.0 Compiling esp-idf-sys v0.35.0 Compiling esp-idf-hal v0.44.1 Compiling esp-idf-svc v0.49.1 Compiling espt12 v0.1.0 (C:\espt12) The following warnings were emitted during compilation:

warning: esp-idf-sys@0.35.0: Compiler family detection failed due to error: ToolNotFound: Failed to find tool. Is cc installed? (see https://docs.rs/cc/latest/cc/#compile-time-requirements for help) warning: esp-idf-sys@0.35.0: Compiler family detection failed due to error: ToolNotFound: Failed to find tool. Is cc installed? (see https://docs.rs/cc/latest/cc/#compile-time-requirements for help)

error: failed to run custom build command for esp-idf-sys v0.35.0

Caused by: process didn't exit successfully: C:\espt12\target\release\build\esp-idf-sys-b6269cda32b60966\build-script-build (exit code: 101) --- stdout cargo:rerun-if-env-changed=ESP_IDF_TOOLS_INSTALL_DIR cargo:rerun-if-env-changed=ESP_IDF_SDKCONFIG cargo:rerun-if-env-changed=ESP_IDF_SDKCONFIG_DEFAULTS cargo:rerun-if-env-changed=MCU cargo:rerun-if-env-changed=ESP_IDF_SYS_ROOT_CRATE cargo:rerun-if-env-changed=ESP_IDF_VERSION cargo:rerun-if-env-changed=ESP_IDF_REPOSITORY cargo:rerun-if-env-changed=ESP_IDF_CMAKE_GENERATOR cargo:rerun-if-env-changed=IDF_PATH cargo:rerun-if-env-changed=EXTRA-COMPONENTS cargo:rerun-if-env-changed=ESP_IDF_COMPONENTS cargo:rerun-if-env-changed=ESP_IDF_COMPONENT_MANAGER Python 3.12.4 pip 24.1.2 from C:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\Lib\site-packages\pip (python 3.12) Requirement already satisfied: pip in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (24.1.2) Requirement already satisfied: setuptools in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (71.0.0) Collecting setuptools Using cached setuptools-71.1.0-py3-none-any.whl.metadata (6.6 kB) Using cached setuptools-71.1.0-py3-none-any.whl (2.3 MB) Installing collected packages: setuptools Attempting uninstall: setuptools Found existing installation: setuptools 71.0.0 Uninstalling setuptools-71.0.0: Successfully uninstalled setuptools-71.0.0 Successfully installed setuptools-71.1.0 Looking in indexes: https://pypi.org/simple, https://dl.espressif.com/pypi Ignoring importlib_metadata: markers 'python_version < "3.8"' don't match your environment Collecting setuptools (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 3)) Using cached https://dl.espressif.com/pypi/setuptools/setuptools-71.0.0-py3-none-any.whl (908 kB) Requirement already satisfied: packaging in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 4)) (24.1) Requirement already satisfied: click in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 7)) (8.1.7) Requirement already satisfied: pyserial in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 8)) (3.5) Requirement already satisfied: cryptography in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 9)) (41.0.7) Requirement already satisfied: pyparsing in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 10)) (3.1.2) Requirement already satisfied: pyelftools in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 11)) (0.31) Requirement already satisfied: idf-component-manager in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (1.5.3) Requirement already satisfied: esp-coredump in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 13)) (1.11.0) Requirement already satisfied: esptool in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 14)) (4.7.0) Requirement already satisfied: esp-idf-kconfig in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 15)) (1.4.2) Requirement already satisfied: esp-idf-monitor in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 16)) (1.4.0) Requirement already satisfied: esp-idf-size in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 17)) (1.5.0) Requirement already satisfied: esp-idf-panic-decoder in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 18)) (1.1.0) Requirement already satisfied: pyclang in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 19)) (0.4.2) Requirement already satisfied: construct in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 20)) (2.10.70) Requirement already satisfied: freertos_gdb in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from -r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 23)) (1.0.3) Requirement already satisfied: colorama in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from click->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 7)) (0.4.6) Requirement already satisfied: cffi>=1.12 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from cryptography->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 9)) (1.16.0) Requirement already satisfied: requests<3 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (2.32.3) Requirement already satisfied: urllib3<2 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (1.26.19) Requirement already satisfied: requests-file<2 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (1.5.1) Requirement already satisfied: requests-toolbelt in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (1.0.0) Requirement already satisfied: schema<=0.7.5 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (0.7.5) Requirement already satisfied: six in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (1.16.0) Requirement already satisfied: tqdm<5 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (4.66.4) Requirement already satisfied: pyyaml>5.2 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (6.0.1) Requirement already satisfied: cachecontrol>0.12.6 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from cachecontrol[filecache]>0.12.6; python_version >= "3.6"->idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (0.14.0) Requirement already satisfied: contextlib2>0.6.0 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (21.6.0) Requirement already satisfied: pygdbmi>=0.9.0.2 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from esp-coredump->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 13)) (0.11.0.0) Requirement already satisfied: bitstring>=3.1.6 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from esptool->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 14)) (4.2.3) Requirement already satisfied: ecdsa>=0.16.0 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from esptool->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 14)) (0.19.0) Requirement already satisfied: reedsolo<1.8,>=1.5.3 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from esptool->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 14)) (1.7.0) Requirement already satisfied: intelhex in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from esptool->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 14)) (2.3.0) Requirement already satisfied: kconfiglib>=13.7.1 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from esp-idf-kconfig->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 15)) (14.1.0) Requirement already satisfied: windows-curses in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from esp-idf-kconfig->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 15)) (2.3.3) Requirement already satisfied: rich in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from esp-idf-size->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 17)) (13.7.1) Requirement already satisfied: bitarray<3.0.0,>=2.9.0 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from bitstring>=3.1.6->esptool->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 14)) (2.9.2) Requirement already satisfied: msgpack<2.0.0,>=0.5.2 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from cachecontrol>0.12.6->cachecontrol[filecache]>0.12.6; python_version >= "3.6"->idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (1.0.8) Requirement already satisfied: filelock>=3.8.0 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from cachecontrol[filecache]>0.12.6; python_version >= "3.6"->idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (3.15.4) Requirement already satisfied: pycparser in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from cffi>=1.12->cryptography->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 9)) (2.22) Requirement already satisfied: charset-normalizer<4,>=2 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from requests<3->idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (3.3.2) Requirement already satisfied: idna<4,>=2.5 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from requests<3->idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (3.7) Requirement already satisfied: certifi>=2017.4.17 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from requests<3->idf-component-manager->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 12)) (2024.7.4) Requirement already satisfied: markdown-it-py>=2.2.0 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from rich->esp-idf-size->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 17)) (3.0.0) Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from rich->esp-idf-size->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 17)) (2.18.0) Requirement already satisfied: mdurl~=0.1 in c:\espt12.embuild\espressif\python_env\idf5.2_py3.12_env\lib\site-packages (from markdown-it-py>=2.2.0->rich->esp-idf-size->-r C:\espt12.embuild\espressif\esp-idf\v5.2.2\tools\requirements\requirements.core.txt (line 17)) (0.1.2) Installing collected packages: setuptools Attempting uninstall: setuptools Found existing installation: setuptools 71.1.0 Uninstalling setuptools-71.1.0: Successfully uninstalled setuptools-71.1.0 Successfully installed setuptools-71.0.0 Upgrading pip and setuptools... Skipping the download of C:\espt12.embuild\espressif\espidf.constraints.v5.2.txt because it was downloaded recently. Installing Python packages Constraint file: C:\espt12.embuild\espressif\espidf.constraints.v5.2.txt Requirement files:

Vollbrecht commented 1 month ago

That may be a espup problem. We have similar reports from other uses and they could resolve it by downgrading to espup version 11 and installing the toolchain with that espup version. There is an open issue here

MiniMinerX commented 1 month ago

That makes sense. I'll try that today. For now I gave up on rancid windows and am running Ubuntu inside of vmware workstation. The Linux setup of esp32 for me was a breeze, so I've been developing on that. I also tried wsl, but my esp32 needed the ch341 drivers, so I had to recompile the wsl kernel with them enabled. Then I broke wsl usbipd for good it seems, so vmware is my savior.

ivmarkov commented 1 month ago

That makes sense. I'll try that today. For now I gave up on rancid windows and am running Ubuntu inside of vmware workstation. The Linux setup of esp32 for me was a breeze, so I've been developing on that. I also tried wsl, but my esp32 needed the ch341 drivers, so I had to recompile the wsl kernel with them enabled. Then I broke wsl usbipd for good it seems, so vmware is my savior.

When I used to work with WSL, I used to do all development from Linux, but then for flashing I just copied the resulting ELF to the Windows partition and then used the espflash utility natively compiled for Windows (with cargo install espflash). This way I did not have to deal with obscure usb drivers on the Linux level.

ivmarkov commented 1 month ago

If I remember correctly, I think you can call native windows binaries from the Linux shell, so with some bash scripting you can further automate calling the Windows-compiled espflash from WSL.