I've read <
https://emscripten.org/docs/compiling/Dynamic-Linking.html>, but I'm used to native code linking, and I have questions.
I'm porting a large library written in C and C++ to Emscripten, along with its test harness. I can build them as a statically linked program, putting it into one big .js file via SINGLE_FILE, and it runs. There are various problems to solve, but it runs in Node.js and passes quite a few tests.
I am not producing a web application. The library is intended to be used in web applications, written by organisations that license this (commercial, closed-source) library. Up to now, I've been assuming that I need to ship the library in archive library form, because when this project was first scoped, about two years ago, modules couldn't call modules directly, only via JavaScript. Creating a JavaScript binding for this library would be a huge task, and I'm not attempting it at present.
Today, I checked the dynamic linking page, and it looks as if modules can now call modules directly, without going through JavaScript. First of all, is that correct?
If that is true, I clearly need to build my library as a Side Module and my test harness as a Main Module, linked against the Side Module, for load-time dynamic linking. The page says that Side Modules can't be linked against system libraries, but presumably they can use system libraries? It's just that the Main Module must be linked against all system libraries that any Side Modules use? My Side Module definitely requires the C and C++ run-time libraries.
If that's all correct, how do I tell my Main Module where to find the Side Module when I run the program in Node.js? Is there an equivalent of $LD_LIBRARY_PATH? Or does it just have to be in the same directory?
How does a web application get access to the Side Module? I'm not doing this, but I will inevitably be asked about it.
Thanks in advance,
John Dallman