samuelludwig

samuelludwig

`mix escript.build` creating an archive file instead of an executable

Hello all! I’m (on Windows) trying to turn a mix project ( exe_example ) into an executable with mix escript.build at the root of the project. A file titled ‘exe_example’ is created, but whenever I tried to run it via .\ , double-click , etc. it just opens the binary file itself, instead of executing any instructions, so I’m just presented with symbols and gibberish. Curious, I checked the properties of the file that was being created, and it was listed as having only an ‘A’ attribute, meaning it is an archive file, not an executable. Trying to manually convert this archive file into an executable didn’t do the trick either. In addition, another oddity is that while the code is very small (just a sort of hello world cli program), the file ends up being about a megabyte size minimum, I assume this is elixir being embedded, or something else?

I’ve tried copying a few different tutorials online that were all essentially doing a basic cli program, and whenever I’ve gotten to the point of building the executable, I’ve run into this every time, and I’ve also tried on my laptop as well (also windows) and I had the same issue.

Has anyone else had this happen or otherwise might know a cause?

Marked As Solved

crazymevt

crazymevt

to run it, you need to run

escript exe_example

Assuming exe_example is the name of the compiled file.

It’s not a native executable, it’s more like a jar file from java. On windows, if you give the compiled file an extension you can associate that to be opened by escript automatically.

Also Liked

OvermindDL1

OvermindDL1

Actually they use ./<filename>, the forward slash is important, it’s not backslash. :slight_smile:

They reason why is that on both linux and mac (and ‘most’ things other than windows) when you ‘execute’ a file the kernel first checks if it has the executable bit set (chmod +x ... sets that), if so then it tests if it is an ELF format file and executes that (ELF is like Windows PE (*.exe) files but for other OS’s, it is super common), if it is not that then it tests if the first two characters in the file are #! and if it is then it takes whatever is after that up until the first newline (\n) and then ‘runs’ that program instead, passing this file ‘to’ that program.

Escript files have a #!elixir or something like that at the start, so running the file ./blah is like doing elixir ./blah, of which since # is the comment character in elixir it ignores that first line anyway, that’s actually why most ‘scripting’ formats use # as a comment indicator, because of that. :slight_smile:

Windows has nothing like that, you have to manually define mappings between weird things like the trailing extension and so forth. ^.^

samuelludwig

samuelludwig

Interesting, thank you for the help! Been wrestling with this for 3 days now o/

Where Next?

Popular in Questions Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
New
Tee
can someone please explain to me how Enum.reduce works with maps
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
mgjohns61585
Could someone help me? I’m making my first elixir program, number guessing game. I can’t figure out how to convert the user’s guess from ...
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
dotdotdotPaul
Okay, I’m having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I’m sure I’...
New
yawaramin
In the Dialyzer docs ( dialyzer — OTP 29.0.2 (dialyzer 6.0.1) ), there is a way to turn off a specific warning for a function: -dialyzer...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New

Other popular topics Top

sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
chrismccord
This release brings a number of exciting features, including integration with the new Phoenix LiveDashboard and Phoenix LiveView. There h...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

We're in Beta

About us Mission Statement