Build native 64bit and 32bit exe with JXCore - node.js

I'm looking for a way to builn a native 32bit exe on my 64bit developing machine.
Usually I would run: jx compile .\PhotoFly.jxp
But that produces a 64bit version.
Any ideas how to get the 32bit version?

To build a native 32bit app on 64bit platform, you should use jx compiled for ia32 processor.
If this is on Windows, you can either use the Windows Setup (x32/x64/SM/V8) (on x64 Windows you will have an option to install x32 JXcore binaries as well) or download the exact binary e.g. Windows 32 (V8) - all available on JXcore download page.
Then you can pack the app on 64bit Windows as usual:
> c:\path_to_jx_32\jx compile .\PhotoFly.jxp

Related

How to build QT 4.8.7 For 32-bit

I am using Ubuntu 14.04 (64-bit). I want to build QT 4.8.7 Source code for 32-bit. How to configure the build?
Well if all solutions in the comments fail. Do it as me in VirtualBox. Install 32b operating system there and build what you want.

Is it possible to run Edge.js on a 32-bit environment?

I am looking at the Edge.js docmentation here and the instructions are for 64-bit Ubuntu. Is it possible to have Edge.js running on 32-bit Ubuntu instead?
No.
From the very docs you linked:
High level, you must have Node.js x64 and Mono x64 installed on the machine before you can install Edge.js. (emphasis mine)

Building with Mono mkbundle on x86 won't run on x64

I have a .NET application that runs on Linux, using Mono. I want to avoid users having to install Mono, so am using mkbundle. I am running mkbundle on an x86 machine, with the expectation of the resulting binary being able to run on x64 machines:
mkbundle MyApp.exe *.dll -o MyApp
I can then run the resulting application on the build machine with `./MyApp'
However, when I copy it to an x64 machine (and make it executable) it won't run, just outputting:
bash: ./MyApp: No such file or directory
If I try ldd I get:
not a dynamic executable
Shouldn't binaries built for x86 run on x64 systems?
I'm rather new to Linux, and it seems x86/x64 isn't quite as straightforward as it is on Windows, as many x64 Linux distributions don't ship with the capability to run 32-bit binaries.
After installing 32-bit libraries on the x64 machine, the x86 code will execute as expected (e.g. on Ubuntu 7.04, apt-get install ia32-libs.
While this works, as I need to target a number of distributions I've decided to just create separate builds for x86 and x64 instead.

Lazarus cross compile from 32bit to 64bit

I know I can cross compile from 64bit to 32bit in Lazarus:
http://wiki.lazarus.freepascal.org/Cross_compiling#From_Linux_x64_to_Linux_i386
But I need to compile 64bit from a 32bit OS install. My CPU is 64bit but I never installed 64bit Ubuntu when I did my OS install.
I want to try to keep away from installing a virtualbox with 64bit Ubuntu as it's a lot of time required and my Lazarus is very customized. So I'm looking for some way to compile into 64bit from my 32bit Linux OS.
According to http://wiki.freepascal.org/Cross_compiling#Host_and_target_on_different_CPUs it should be no problem!

When compiling x64 code, what's the difference between "x86_amd64" and "amd64"?

When compiling code with VC++, MSDN gives you the option between using the x86_amd64 toolset or the amd64 toolset (when calling vcvarsall.bat).
How do I choose between those two when compile x64 code? Will the amd64 option churn out more efficient x64 machine code than the cross compiler?
It has nothing to do with efficiency. The native and cross-compiler will both generate the same machine code. You will however gain some benefits by running a native 64-bit compiler process on a 64-bit workstation (larger registers, larger memory space, etc...).
The native compiler will only run on an 64-bit copy of Windows, so if your workstation is 32-bit this compiler won't even run.
The cross-compiler is meant to run on x86 machines even though it will run on a 64-bit copy of Windows via WoW; however, there is no reason to do this.
The page you link says it quite well:
x64 on x86 (x64 cross-compiler)
Allows
you to create output files for x64.
This version of cl.exe runs as a
32-bit process, native on an x86
machine and under WOW64 on a 64-bit
Widows operating system.
x64 on x64
Allows you to create output
files for x64. This version of cl.exe
runs as a native process on an x64
machine.
Thanks to Brian R. Bondy for the quote formatting
From what you linked:
x64 on x86 (x64 cross-compiler)
Allows
you to create output files for x64.
This version of cl.exe runs as a
32-bit process, native on an x86
machine and under WOW64 on a 64-bit
Widows operating system.
x64 on x64
Allows you to create output
files for x64. This version of cl.exe
runs as a native process on an x64
machine.
Paraphrased:
If you use x86_amd64, then you are typically developing on an x86 machine and you want to create x64 files that run natively on x64. You could also use this option on an x64 machine but your compiler will be running under WOW64 emulation.
If you use AMD64, then you are developing on an x64 machine and you want to create x64 files that run natively on x64. The compiler is running natively in x64. This option is more efficient to build x64 programs.
You may wonder why you would ever develop an x64 program on an x86 computer, since you can't run it you can't debug it. Well it's still useful for example if you have a build server which is x86 and that build server needs to generate both x86 and x64 outputs.
How is it possible for a compiler to run under x64 if it is an x86 based program (x86_amd64)? That is the same reason you can run any x86 program on your x64 machine... Thanks to WOW64 emulation.
What is WOW64 emulation:
WOW64 emulation happens when you run an x86 program on an x64 computer (or IA64). WOW64 stands for Windows 32 on Windows 64. It is an emulation layer on top of x64 machines which allow you to execute x86 programs.
Your file system operations will be redirected to WOW64 folders and your registry will be redirected to a subnode as well. For example when you try to obtain the folder for program files it will return c:\program files (x86)\ if you are using WOW64 but it will return c:\program files\ if you are using x64.
Another example, for the registry if you try to write to HKLM\Software\Something it will really redirect you to HKLM\SOFTWARE\Wow6432Node\Something without your x86 program's knowledge.
Running a native x64 build will be more efficient than running through WOW64 emulation Why? Because you don't have that extra emulation layer of transforming your 32bit calls into 64bit ones.
By the way if you are running the x64 version of Windows you can see which processes are running through WOW64 because they will have a *32 appended to the process name in the process list.

Resources