DAW wont recognize my .dll plugin on other PC


#1

Hello everyone,
I have been working on my plugin for quite some time, and I have always built Debug version of my plugin. It works on my pc where I coded it and where I have JUCE installed, both in JUCE host and in DAW that I use,Ableton. On that PC I have installed win 8.1 pro 64bit. Now I wanted to test if it is going to work on my laptop where I have also installed Ableton. I just copied the Debug dll and it wont even detect when I put it in my VST folder with all the rest of plugins.I have read on JUCE forum that I should build it in Release version, so I have also tried that with no success. Plus on my pc where everything worked fine, the release version crashes Ableton when I try to load my plugin. On my laptop I have installed win 7 64 bit.
What could cause the problem like this? I am quite unexperienced with dll files and all that linking stuff so any advice you have will be more than great.
Thanks in advance,
Cila

Edit: Release build on my PC where I coded plugin is now working fine, still have a problem with making it to work on laptop.


#2

It probably needs a runtime. There is the option in your project, to statically link to a runtime, and you have no problems. Microsoft (or was it Steinberg) wants to nudge people though to use dynamic linking to save resources. In this case you have to ship the redistributable runtime with your installer.
To find out, what is missing in your installation, I recommend dependency walker. It can check executables and dlls, what libraries they try to link and check if they are present.

Good Luck


#3

I have tried static link but no success in detecting plugin. Dependency walker gave me as a result that one .dll file is missing on laptop, but as a result on my PC the same dll is missing and even some more files are missing too but it is working on that one. What else I could try? What could cause problems even when it is statically linked in plugin dll file?
I am grateful for your help,
Cila.


#4

Does the CPU architecture match? (That is, you are testing with 64 bit Ableton Live if your plugin is built as 64 bit…)

Also if you didn’t already switch to that, using release builds is pretty much a must when testing on other machines.


#5

Yes, both Ableton and plugin are 64 bit, and I am using release build, tried both with dynamic linking and static one, in both cases DAW doesn’t show it in plugin folder. I see that Ableton scans the dll, but for some reason it drops it off.


#6

Maybe based on the previous scans failing, Live has black listed the plugin. I don’t know how to reset that, though…


#7

I will try reinstalling Ableton and see if that works,


#8

Reinstallation won’t necessarily remove the settings files…


#9

Is there maybe a way to check,some way of debugging, why Ableton drops it off, it probably has some reason?


#10

If it is blacklisted, something in this may help.


#11

I have tried that still no avail, I tried checking Ableton log files, but there is not much accessible info. I have no idea what may be causing this type of problem :frowning:


#12

I am still trying to figure this out. I think I have tried almost any combination of project properties. I have tried to build release version with static and dynamic linking runtime, and both of them are working well on PC where I have JUCE installed and where I coded the plugin itself. But on the laptop they are not working properly. They are not being detected by Ableton, Reaper says that the plugin is crashing it, and when I tried to load it with JUCE plugin host, scaning the plugin made the host crash.
Now I read somewhere that static link runtime makes a dll file size significantly larger so I thought I should check that. If I use dynamic, its size is about 5MB, with static it is just a bit more than 0.3 MB larger. After that, in visual studio 2015 which I use, in property pages of my project I checked and in tab named Project defaults it says that it has dynamic library configuration type (I dont know if this is the same as runtime propertioes in projucer) and I tried to change that to static and got a file with size around 143 MB. I tried with that and now it didnt crash JUCE plugin host, it said that it failed to load and I got a waring that says that it is possible that plugin is not a windows application or it generated an error, so I hit a dead end again.
I have tried on 2 more PCs and I still had no success, both of them gave me the same results. If there is anyone who might know some solution to this I would be very grateful. If you need some more details feel free to ask.

When plugin is being scanned by the host, which functions in plugin are being called, what is the procedure? I will try to debug and see where it breaks.


#13

Sounds like a messy debugging process :slight_smile:

Check all these points and it should work :

  • Delete all the occurences of the plug-in from the computer (sometimes some people have two or more and the DAW is confused with it so it might ignore the most recent one)
  • Compile your plug-in in Release mode with static linking, and not dynamic. Do the change in the Projucer, not directly in Visual Studio, and save the project to recompile it in Visual Studio
  • Check that the Visual Studio exporter properties in the Projucer are 64 bits, and maybe 8.1 for the Windows SDK version. I know that compiling something with 10 SDK will make it compatible with 8.1, but I don’t know if Windows 7 will accept this.
  • In Ableton Live, keep ALT pressed and click on Rescan this will rescan all the plug-ins, including blacklisted
  • Most important advice : you should be sure that your plug-in is not just crashing because you did something wrong with your code that has nothing to do with linking, Windows 7, Ableton Live or whatever. If you got some random crashes on the other computer, then you should look for any serious bug in your plug-in, and the correct way to do is to use Visual Studio Debugger

#14

I have already done some of those things. So to recapitulate, for static linking runtime, I have to change it in Projucer so that I get the file around 5.3 MB and not the one above 100MB, from example given in the post above?
Is it still possible to be something wrong with the code even when it is running perfectly on one PC?
If it can be helpful, I can share screenshots from Dependency walker on plugin dll file from both of PCs.


#15

Does the plugin use some external files (audio files, images, other data)? Is that data present on the other computer? Does your code correctly form the absolute file paths to those files?

Another thing that had me puzzled with own plugin was that I had turned on CPU instructions (AVX2 or some such) that were not generally available on other people’s computers. I started getting reports from users the plugin just wasn’t working and I finally realized the CPU instructions issue…

Are you using some 3rd party library (FFTW or whatever) via a static library file (.lib) that may have had different build settings than your plugin?


#16

It uses some images for image buttons, but I have them added in resources in Projucer. This plugin is pretty basic, I have some .txt documents where I read some data from and a couple of .wav files also, with well defined absoulte file paths, and I move those files also where they need to be when I copy it to another PC. I am not using any 3rd party libraries. Do I need to compy those external files too or is it already in when I added them through Projucer?


#17

Are you sure the external file paths are formed correctly? Does your code do error handling if loading the files fails? (Obviously using external files can be made to work, you don’t strictly speaking need to use the JUCE binary resources system but it is useful for cases when you absolutely need to have the data available for the code to function correctly.)


#18

Those external files I have, .txt documents and .wav files are to be located in the same folder as where user wants to put .dll file of plugin. I get that location in my code with File::SpecialLocationType::currentApplicationFile and from there I navigate to files I need. I have made some basic error handling if loading fails or if it has no permission to write.

Edit: Okay, it definitely is not related to linking because I have tried now copying some of JUCE plugin examples build on my PC to laptop and they work fine, now I will dive into debugging to find where it crashes and when I find solution I will post it here.


#19

That’s unquestionably the first thing you should do when you get a crash.

There’s really not much point asking other people’s advice until you’ve actually seen what’s happening for yourself!


#20

Yes it is, but as I mentioned before the plugin is working fine on my PC, and I thought it is a linking problem that causes it to crash on other PCs because I am quite unexperienced with dynamic libraries. That is why I was asking for advice on linking from more experienced users.