Error Compiling VST3

I get the following error when trying to compile the basic first vst tutorial:

Compiling include_juce_audio_plugin_client_VST3.cpp
In file included from /home/user/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26,
from …/…/JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
/home/user/JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:67:11: fatal error: pluginterfaces/vst2.x/vstfxstore.h: No such file or directory
67 | #include “pluginterfaces/vst2.x/vstfxstore.h”
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:146: build/intermediate/Debug/include_juce_audio_plugin_client_VST3_dd633589.o] Error 1

I’ve double checked all the dependencies, distro is Linux Mint 20 Ulyana base: Ubuntu 20.04 focal

It seems like the “replace VST2 with VST3” parts of the code in the juce_audio_plugin_client_VST3.cpp aren’t working properly. I have enough coding experience to see that, but no idea how to go about amending it.

Please make sure that JUCE_VST3_CAN_REPLACE_VST2 is set to “Disabled” in Projucer (in the settings of the juce_audio_plugin_client module).

2 Likes

Boom, cleared that pesky error, onto the next one:

Linking Tutorial - VST3
/usr/bin/ld: build/intermediate/Debug/include_juce_audio_plugin_client_VST3_dd633589.o: in function juce::createPluginFilterOfType(juce::AudioProcessor::WrapperType)': /home/user/JUCE/modules/juce_audio_plugin_client/utility/juce_CreatePluginFilter.h:39: undefined reference to createPluginFilter()’
collect2: error: ld returned 1 exit status
make: *** [Makefile:130: build/Tutorial.vst3/Contents/x86_64-linux/Tutorial.so] Error 1

You need an implementation of createPluginFilter() somewhere in your code. Are you missing this?

Not sure why I would need that, it should be compiling the most basic audio plugin like the third getting started tutorial instructs. So I guess the issue, is why is it calling that function when it doesn’t need to?

Here is what the juce_CreatePluginFilter.h file contains:

#pragma once

/** Somewhere in the codebase of your plugin, you need to implement this function
and make it return a new instance of the filter subclass that you’re building.
/
juce::AudioProcessor
JUCE_CALLTYPE createPluginFilter();

namespace juce
{

inline AudioProcessor* JUCE_API JUCE_CALLTYPE createPluginFilterOfType (AudioProcessor::WrapperType type)
{
AudioProcessor::setTypeOfNextNewPlugin (type);
AudioProcessor* const pluginInstance = ::createPluginFilter();
AudioProcessor::setTypeOfNextNewPlugin (AudioProcessor::wrapperType_Undefined);

// your createPluginFilter() method must return an object!
jassert (pluginInstance != nullptr && pluginInstance->wrapperType == type);

return pluginInstance;

}

} // namespace juce

I’m really lost inside those debugging files though, so not sure which part is calling what and causing the error. I’m hoping it’s like the first bit and there is a setting i need to turn on/off

The contents of juce_CreatePluginFilter.h looks fine and unless you’ve changed it yourself, it shouldn’t be in your way of compiling a plugin.

When you create a new Audio Plug-In project in Projucer, it generates 4 files and adds them to the project: PluginProcessor.cpp, PluginProcessor.h, PluginEditor.cpp, and PluginEditor.h.

If your project is named Tutorial, then PluginProcessor.cpp should end with:

//==============================================================================
// This creates new instances of the plugin..
juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter()
{
    return new TutorialAudioProcessor();
}

If you can’t find that code at the end of PluginProcessor.cpp, then you might have removed it by accident.

If that code is there, then PluginProcessor.cpp is maybe not compiled as expected. When looking at the Source folder in Projucer’s “File explorer”, it should be similar to this:

1 Like

Really appreciate these detailed answers! We’ve found the issue but not the fix yet. I only get three files in my source folder, none of them labelled similar to yours.

This means that you created a “GUI Application” project, not an “Audio Plug-In” one.

In order to create a Plug-In, you need to select “Plug-In > Basic” in the “New Project” wizard of Projucer:

This is explained in the “Select your project type” section of JUCE: Tutorial: Projucer Part 1: Getting started with the Projucer

1 Like

feel really guilty for that one, swear my brain read “audio” in the app drop down and stopped there

Thank you for all the help here, really appreciate it. I swear no matter how many languages or frameworks you learn the first day with each one is like your first day with coding, worsened by my lack of attention to details in the tutorials.

No worries, you’re not the first/only one to fall into that trap. The UI of Projucer 5 was much clearer in that regard: