Codemesh Runtime Libraries
The picture below illustrates the relationship between different parts of your JuggerNET® -enhanced application.
All JuggerNET -enhanced applications rely on the Codemesh Runtime Library. The Codemesh Runtime Library consists of two components:
- a managed runtime library (assembly), named
- an unmanaged runtime library (DLL), named
This DLL in turn relies on the Microsoft C++ runtime DLLs. Every version of Microsoft's C++ compiler has its own version of these libraries and they are usually installed on all Windows computers.
When you're building a .NET application, you only need the managed library because it contains all the managed types that JuggerNET-generated proxy types reference.
When you're running a JuggerNET-enhanced application, you will also need an unmanaged runtime library because the managed runtime library delegates some calls to the unmanaged runtime library.
The Codemesh code generator bundles the managed runtime library(s) but it ships without any unmanaged runtime libraries. This means that, out of the box, you can build your integrated applications but you can't run them.
We chose not to bundle the unmanaged runtime libraries because of a very practical problem: the code generator is essentially a shared component of two products: JunC++ion® and JuggerNET. On the JunC++ion side, we support many different operating systems, processor architectures, and compilers. We did not want to bundle all unmanaged runtime libraries for every platform/processor architecture/compiler combination because that would have created a prohibitively large package for the customers who are only interested in one platform/compiler. The other approach, i.e. creating different, dedicated bundles, creates too many redundant download packages for the customers who are interested in more than one platform/compiler combination. This is why we chose to make specific unmanaged runtime library bundles available for download.
You can download them from the same directory from which you downloaded the code generator or you can let the code generator do it for you, the latter being the prefered alternative. When you run the code generator in GUI mode, it will pop up a dialog that allows you to download the runtime library that's deemed appropriate for your platform, assuming we support your platform. If you work in headless mode with a remote build machine, you can run the code generator with the
-download option, for example
Regardless of GUI or commandline mode, you will need to enter your code generator download credentials. If the download succeeds, the code generator will unpack the downloaded archive into the code generator's
cpp directory and execute a post install script, marking the libraries as executable and creating some links.
You will receive some error feedback if anything goes wrong during this process. You should call us if that happens and we can probably get you going quickly with some targeted advice.
What if that did not work?
The code generator's download command might fail if you are located behind an aggressive firewall or have other network security measures in place. In this case, try a manual download by following the steps below.
- Create a subdirectory named
downloadin your code generator installation.
- Assuming you have the latest version of the code generator, go directly to the download page and click the link for the Windows runtime library. You will need your download credentials for this to succeed.
If you need an older version of the runtime library, replace the
latestpart of the link with the version number, for example, to download the Windows runtime library version 1.0.107, the name of the file to download would be
- Save the downloaded zip file into your code generator's
downloaddirectory. Create that directory if necessary.
- Restart the code generator. It should now unpack the zip file and run the runtime library install scripts if necessary. You will need write privileges to your code generator distribution for this to succeed.
A Few Words on Directory Names
All unmanaged runtime libraries are nested relatively deeply in the
cpp folder. A typical runtime library path might be
You can probably spot the naming pattern here. The folder hierarchy is described below:
|Platform||an operating system name|
|Processor Architecture||a processor architecture name|
|Compiler||a compiler name/version|
This hierarchy allows us, and you, to combine lots of different runtime libraries in one shared code generator installation. The base code generator package contains the portable components, for example the code generator's jar files and you let the code generator install the required runtime libraries into that hierarchy without overwriting components for other platforms.
When you run or deploy your application, you will need to pick one of the bundled libraries. Your choice of 32-bit vs. 64-bit decides whether you should look in the
amd64 subdirectories. Within that directory hierarchy, you should probably go for the release version built with the latest supported Micarosoft Visual C++ compiler.