Unable to get a compiled basic VST detected on Ableton Live and/or Bitwig (Windows)

DSP, Plugin and Host development discussion.
RELATED
PRODUCTS

Post

Hummm...

I don't know how Visual Studio 11 compiler was installed because I had Visual Studio Express 2013 installed and after uninstall it, there are still references to the Visal Studio 11 compiler.

Post

I was not linking with "delayimp.lib". Now the project compiles and links successfully but still no joy on Live.

Post

This is what happens now (Visual Studio console output from debugger)

'Ableton Live 9 Standard.exe' (Win32): Loaded 'C:\tmp\build-vst-Desktop_Qt_5_4_1_MSVC2013_OpenGL_32bit-Release\release\audiolab.dll'. Module was built without symbols.
'Ableton Live 9 Standard.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr120.dll'. Cannot find or open the PDB file.
'Ableton Live 9 Standard.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp120.dll'. Cannot find or open the PDB file.
First-chance exception at 0x74954598 (KernelBase.dll) in Ableton Live 9 Standard.exe: 0xC06D007E: Module not found (parameters: 0x0018E760).
Unhandled exception at 0x74954598 (KernelBase.dll) in Ableton Live 9 Standard.exe: 0xC06D007E: Module not found (parameters: 0x0018E760).

Post

Yes.. Well at least you know what the problem is now (or what this current problem is, there is sure to be others following :) ).
I'm afraid i can't help you more currently, you will have to debug the missing dependencies yourself (which is something i don't have a lot of experience with).

Also, another thing: You might want to build debug versions of your build instead, so it actually carries symbol information, diagnostic messages etc. etc.

Post

Yes. I understand. I will post the solution when I have one! ;)

Thanks for all the help so far.

Regards

Post

I have discovered something. If I place the necessary libs along Ableton Live executable, the plugin loads. The delay load technic is not working.

Post

Yes, as I said, the problem is when Ableton loads your vst, the current working directory (where windows searches for dependencies) is Ableton's, not your dll's folder - which is why the loading fails.

The point is to delay Windows in searching for the other DLL's until you can specify another search path. If your call (SetDLLDirectory) happens after any of your dependencies are referenced, it won't matter; an exception will occur if the DLL cannot be found at that point in time, and your DLL will be unloaded (i think?). Perhaps place the call in some static global initialization? I think another way to do this would be through managing manifests and dependencies, however I never learned how to.

Maybe ask this question on StackOverflow, I'm sure you're not the first to have this problem.

Post

Yes, that's definitely the problem. I can't however explain why that doesn't work with something linked with Qt5Core.

I will investigate for some alternatives. Your help was crucial.

I will also post my solution here.

Thanks very much,

Regards

Post

The best course of action is to add your dependencies as static libraries. I had some plugins with shared libraries, but it is not really great, especially if other plugins also have similar dependencies, they may end up share their libraries, mixing their behavior, and it can be pretty nasty. With static linking, all the dependencies are in the library, so the calls to the third party libraries will stay inside the plugin, without interaction with the outside world/DAW, limiting the risks of dependency hell.

Post

Yes static linking is usually faster also. I suppose the argument for dynamic linking is better cache usage.

Post

It's a little faster for application that are compiled for static linkage, which is not the case here (relocatable code). The only benefit is a somewhat faster first loading time.
The big advantage of dynamic linking is upgrading libraries without having to provide the whole package.

Post Reply

Return to “DSP and Plugin Development”