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

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
New
makeitrein
Hey all, just started picking up Elixir last week and am writing a scraper as a learning project. Baby step #1 is extracting the number ...
New
johnnyicon
Hi all, I've just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I'm trying to use Postg...
New
Exadra37
Sometimes I want to check if the input into a function is not a blank string. My first approach: defmodule Example do def do_stuff(s...
New
sabri
Can someone explain the settings of pool_size of Ecto in config file? and what is the recommend size? Thanks
New

Other popular topics Top

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
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
JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
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
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
beno
I will often find my self writing things similar to: case some_value do nil -&gt; something() "" -&gt; something() _ -&gt; someth...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New

We're in Beta

About us Mission Statement