Open probonopd opened 1 year ago
This symbol is defined in
JUCE/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp
. So why doesn't the linker find it?
As a workaround, disable JUCE_PLUGINHOST_VST3 in Projucer under juce_audio_processors, and enable JUCE_PLUGINHOST_VST. Also see #3.
I built Projucer from the develop
branch https://github.com/juce-framework/JUCE/tree/develop. It seems to run well on FreeBSD, and it seems to be able to produce "Linux" (read: GNU Makefile) targets.
However, it seems like for FreeBSD one has to use a special VST3 SDK that is compatible with FreeBSD.
But when setting "JUCE_CUSTOM_VST3_SDK" to "Enabled" in Projucer and entering /usr/local/include/vst3sdk
under "Header Search Paths", then I get:
% gmake
Compiling include_juce_audio_plugin_client_VST3.cpp
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:86:11: error: 'base/source/fstring.h' file not found with <angled> include; use "quotes" instead
#include <base/source/fstring.h>
^~~~~~~~~~~~~~~~~~~~~~~
"base/source/fstring.h"
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:86:
JUCE/modules/juce_audio_processors/format_types/base/source/fstring.h:40:10: fatal error: 'pluginterfaces/base/ftypes.h' file not found
#include "pluginterfaces/base/ftypes.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.
If I git clone https://github.com/steinbergmedia/vst3sdk/ --recursive
and set its path under "Header Search Paths", then I get:
% gmake clean
Cleaning MultiDexed
% gmake
Compiling include_juce_audio_plugin_client_VST3.cpp
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:86:11: error: 'base/source/fstring.h' file not found with <angled> include; use "quotes" instead
#include <base/source/fstring.h>
^~~~~~~~~~~~~~~~~~~~~~~
"base/source/fstring.h"
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:86:
JUCE/modules/juce_audio_processors/format_types/base/source/fstring.h:40:10: fatal error: 'pluginterfaces/base/ftypes.h' file not found
#include "pluginterfaces/base/ftypes.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.
gmake: *** [Makefile:170: build/intermediate/Debug/include_juce_audio_plugin_client_VST3_dd633589.o] Fehler 1
% readlink -f ../../vst3sdk
vst3sdk
% gmake clean
Cleaning MultiDexed
% gmake
Compiling include_juce_audio_plugin_client_VST3.cpp
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:86:
In file included from vst3sdk/base/source/fstring.h:42:
In file included from vst3sdk/pluginterfaces/base/istringresult.h:19:
vst3sdk/pluginterfaces/base/funknown.h:230:17: error: expected ';' after top level declarator
int32 PLUGIN_API atomicAdd (int32& value, int32 amount);
^
;
vst3sdk/pluginterfaces/base/funknown.h:384:2: error: 'virtual' can only appear on non-static member functions
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
vst3sdk/pluginterfaces/base/funknown.h:384:28: error: expected ';' at end of declaration list
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
;
vst3sdk/pluginterfaces/base/funknown.h:389:2: error: 'virtual' can only appear on non-static member functions
virtual uint32 PLUGIN_API addRef () = 0;
^
vst3sdk/pluginterfaces/base/funknown.h:389:17: error: duplicate member 'PLUGIN_API'
virtual uint32 PLUGIN_API addRef () = 0;
^
vst3sdk/pluginterfaces/base/funknown.h:384:18: note: previous declaration is here
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
vst3sdk/pluginterfaces/base/funknown.h:389:27: error: expected ';' at end of declaration list
virtual uint32 PLUGIN_API addRef () = 0;
^
;
vst3sdk/pluginterfaces/base/funknown.h:393:2: error: 'virtual' can only appear on non-static member functions
virtual uint32 PLUGIN_API release () = 0;
^
vst3sdk/pluginterfaces/base/funknown.h:393:17: error: duplicate member 'PLUGIN_API'
virtual uint32 PLUGIN_API release () = 0;
^
vst3sdk/pluginterfaces/base/funknown.h:384:18: note: previous declaration is here
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
vst3sdk/pluginterfaces/base/funknown.h:393:27: error: expected ';' at end of declaration list
virtual uint32 PLUGIN_API release () = 0;
^
;
vst3sdk/pluginterfaces/base/funknown.h:507:26: error: no member named 'queryInterface' in 'Steinberg::FUnknown'
if (unknown && unknown->queryInterface (getTUID<I> (), (void**)&this->ptr) != kResultOk)
~~~~~~~ ^
vst3sdk/pluginterfaces/base/funknown.h:516:26: error: no member named 'queryInterface' in 'Steinberg::FUnknown'
if (unknown && unknown->queryInterface (getTUID<I> (), (void**)&newPtr) == kResultOk)
~~~~~~~ ^
vst3sdk/pluginterfaces/base/funknown.h:558:7: error: no member named 'release' in 'Steinberg::FUnknown'
u->release ();
~ ^
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from JUCE/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from JUCE/modules/juce_audio_processors/format_types/juce_VST3Headers.h:86:
In file included from vst3sdk/base/source/fstring.h:42:
vst3sdk/pluginterfaces/base/istringresult.h:35:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText (const char8* text) = 0;
^
vst3sdk/pluginterfaces/base/istringresult.h:35:15: error: field has incomplete type 'void'
virtual void PLUGIN_API setText (const char8* text) = 0;
^
vst3sdk/pluginterfaces/base/istringresult.h:35:25: error: expected ';' at end of declaration list
virtual void PLUGIN_API setText (const char8* text) = 0;
^
;
vst3sdk/pluginterfaces/base/istringresult.h:54:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
vst3sdk/pluginterfaces/base/istringresult.h:54:15: error: field has incomplete type 'void'
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
vst3sdk/pluginterfaces/base/istringresult.h:54:25: error: expected ';' at end of declaration list
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
;
vst3sdk/pluginterfaces/base/istringresult.h:56:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText16 (const char16* text) = 0;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
gmake: *** [Makefile:170: build/intermediate/Debug/include_juce_audio_plugin_client_VST3_dd633589.o] Fehler 1
What gives?
When I change the JUCE path and JUCE modules path in Projucer to the FreeBSD-provided /usr/local/include/JUCE-7.0.3
, then I get:
% gmake
Compiling include_juce_audio_plugin_client_VST3.cpp
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from /usr/local/include/JUCE-7.0.3/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /usr/local/include/JUCE-7.0.3/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
/usr/local/include/JUCE-7.0.3/modules/juce_audio_processors/format_types/juce_VST3Headers.h:29:3: error: To build JUCE VST3 plug-ins on BSD you must use an external BSD-compatible VST3 SDK with JUCE_CUSTOM_VST3_SDK=1
#error To build JUCE VST3 plug-ins on BSD you must use an external BSD-compatible VST3 SDK with JUCE_CUSTOM_VST3_SDK=1
^
1 error generated.
gmake: *** [Makefile:170: build/intermediate/Debug/include_juce_audio_plugin_client_VST3_dd633589.o] Fehler 1
Maybe @yurivict knows?
I just updated the devel/juce port to 7.0.5 - please try to build with it.
Thanks @yurivict. Does building the 7.0.5 port with the examples (make config
, check the checkbox) work for you?
With the JUCE 7.0.5 port, when setting "JUCE_CUSTOM_VST3_SDK" to "Enabled" in Projucer and entering /usr/local/include/vst3sdk under "Header Search Paths", then I get:
% gmake -j8
Compiling PluginEditor.cpp
Compiling include_juce_audio_plugin_client_ARA.cpp
Compiling include_juce_audio_formats.cpp
Compiling include_juce_audio_devices.cpp
Compiling include_juce_audio_plugin_client_VST3.cpp
Compiling include_juce_audio_plugin_client_utils.cpp
Compiling PluginProcessor.cpp
Compiling include_juce_audio_basics.cpp
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/juce_VST3Headers.h:86:11: fatal error: 'base/source/fstring.h' file not found
#include <base/source/fstring.h>
^~~~~~~~~~~~~~~~~~~~~~~
Compiling include_juce_audio_processors.cpp
1 error generated.
gmake: *** [Makefile:169: build/intermediate/Debug/include_juce_audio_plugin_client_VST3_dd633589.o] Error 1
gmake: *** Waiting for unfinished jobs....
And without setting that I get:
% gmake -j8
Compiling PluginProcessor.cpp
Compiling include_juce_audio_plugin_client_utils.cpp
Compiling include_juce_audio_formats.cpp
Compiling include_juce_audio_devices.cpp
Compiling include_juce_audio_plugin_client_ARA.cpp
Compiling include_juce_audio_basics.cpp
Compiling include_juce_audio_plugin_client_VST3.cpp
Compiling PluginEditor.cpp
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/juce_VST3Headers.h:29:3: error: To build JUCE VST3 plug-ins on BSD you must use an external BSD-compatible VST3 SDK with JUCE_CUSTOM_VST3_SDK=1
#error To build JUCE VST3 plug-ins on BSD you must use an external BSD-compatible VST3 SDK with JUCE_CUSTOM_VST3_SDK=1
^
Compiling include_juce_audio_processors.cpp
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/juce_VST3Headers.h:86:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h:42:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:19:
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:222:17: error: expected ';' after top level declarator
int32 PLUGIN_API atomicAdd (int32& value, int32 amount);
^
;
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:2: error: 'virtual' can only appear on non-static member functions
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:28: error: expected ';' at end of declaration list
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
;
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:375:2: error: 'virtual' can only appear on non-static member functions
virtual uint32 PLUGIN_API addRef () = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:375:17: error: duplicate member 'PLUGIN_API'
virtual uint32 PLUGIN_API addRef () = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:18: note: previous declaration is here
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:375:27: error: expected ';' at end of declaration list
virtual uint32 PLUGIN_API addRef () = 0;
^
;
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:379:2: error: 'virtual' can only appear on non-static member functions
virtual uint32 PLUGIN_API release () = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:379:17: error: duplicate member 'PLUGIN_API'
virtual uint32 PLUGIN_API release () = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:370:18: note: previous declaration is here
virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:379:27: error: expected ';' at end of declaration list
virtual uint32 PLUGIN_API release () = 0;
^
;
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:493:26: error: no member named 'queryInterface' in 'Steinberg::FUnknown'
if (unknown && unknown->queryInterface (getTUID<I> (), (void**)&this->ptr) != kResultOk)
~~~~~~~ ^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:502:26: error: no member named 'queryInterface' in 'Steinberg::FUnknown'
if (unknown && unknown->queryInterface (getTUID<I> (), (void**)&newPtr) == kResultOk)
~~~~~~~ ^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h:544:7: error: no member named 'release' in 'Steinberg::FUnknown'
u->release ();
~ ^
In file included from ../../JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp:8:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp:26:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:42:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/juce_VST3Headers.h:86:
In file included from /usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h:42:
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:35:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText (const char8* text) = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:35:15: error: field has incomplete type 'void'
virtual void PLUGIN_API setText (const char8* text) = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:35:25: error: expected ';' at end of declaration list
virtual void PLUGIN_API setText (const char8* text) = 0;
^
;
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:54:2: error: 'virtual' can only appear on non-static member functions
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:54:15: error: field has incomplete type 'void'
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
/usr/local/include/JUCE-7.0.5/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h:54:25: error: expected ';' at end of declaration list
virtual void PLUGIN_API setText8 (const char8* text) = 0;
^
;
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
gmake: *** [Makefile:169: build/intermediate/Debug/include_juce_audio_plugin_client_VST3_dd633589.o] Error 1
gmake: *** Waiting for unfinished jobs....
Similar when I git clone https://github.com/steinbergmedia/vst3sdk/ --recursive
and use that path.
@yurivict had you succeeded in building this repo, or just generally asked me to try 7.0.5? In any case, thanks for your help. I really appreciate it.
The relevant patches were in this PR created by me: https://github.com/juce-framework/JUCE/pull/881
They closed it because they merged some other BSD patches, but the ones relevant for demos were left out, particularly in modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h
.
I just don't have time to resubmit patches over and over again.
I asked JUCE maintainers to merge remaining patches.
vst3sdk has no install target (https://github.com/steinbergmedia/vst3sdk/issues/77), so users are reluctant to integrate it properly, or just copy it in, instead of doing something like find_package(vst3sdk)
. JUCE has some portions of vst3sdk copied in but it appears to be broken, or incomplete or outdated.