KafkaEx compilation error on Windows

Hello everyone! I’m new here.

I’m trying to use KafkaEx in an app running on Windows 10 , but when I run mix deps.compile, I get an error related to the c++ compiler.

mix deps.get

Resolving Hex dependencies...
Dependency resolution completed:
Unchanged:
  connection 1.1.0
  crc32cer 0.1.10
  kafka_ex 0.12.1
  kayrock 0.1.14
  varint 1.2.0
* Getting kafka_ex (Hex package)
* Getting kayrock (Hex package)
* Getting connection (Hex package)
* Getting crc32cer (Hex package)
* Getting varint (Hex package)
$ mix deps.compile

==> connection
Compiling 1 file (.ex)
Generated connection app
==> varint
Compiling 2 files (.ex)
Generated varint app
===> Fetching pc (from {git,"https://github.com/blt/port_compiler.git",{tag,"v1.10.2"}})
===> Analyzing applications...
===> Compiling pc
===> Compiling c:/omited_path/kafka_conn_app/deps/crc32cer/c_src/crc32c.c
===> **'cl.exe' is not recognized as an internal or external command,**
operable program or batch file.

==> kafka_conn_app
** (Mix) Could not compile dependency :crc32cer, "escript.exe "c:/Users/Yesid/.mix/rebar3" bare compile --paths c:/omited_path/kafka_conn_app/_build/dev/lib/*/ebin" command failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile crc32cer", update it with "mix deps.update crc32cer" or clean it with "mix deps.clean crc32cer"

escript.exe is in the $PATH variable and rebar3 exists in the specified path.

I installed Visual Studio Community 2022 with the C++ compilers and ran the .bat file found here;
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat
That script sets all the environment variables necessary for the C++ compiler to run.
With this approach I was able to compile the KafkaEx dependency successfully, but I’m trying to find another way to compile it because it’s a bit of a hassle having to run that script every time I want to compile my application’s dependencies.

Elixir version: 1.13.0
Erlang/OTP 24

I really appreciate any help!
Thanks!

You could write a mix alias which does that for you.

Or run it from within the VS developer console, though that’s probably no less hassle then running the script.

Or try using zig as your C compiler.

2 Likes

Whatever terminal app you use will somewhere have a place to configure the shell (cmd or powershell) startup. Just make sure the relevant vcvars*.bat file is run when starting up your shell.

I used the new Windows Terminal, configured in settings a profile to start with cmd /k "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat" && pwsh.exe. That profile is now always equipped with the necessary paths. You could do something similar if you use cmd.exe rather than powershell.

2 Likes

It worked, thanks!

1 Like