Can't compile SNEX workbench
-
I want to use a SNEX node but I'm having trouble compiling SNEX workbench to bake the DLL file.
Using the latest release from develop branch, HISE and SNEX playground compiles fine but SNEX workbench gives me this both on Visual Studio 2017 and 2019:
1>------ Build started: Project: snex_workbench_App, Configuration: Release x64 ------ 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: static char const juce::OSCTypes::int32" (?int32@OSCTypes@juce@@2DB) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: class juce::OSCBundle const & __cdecl juce::OSCBundle::Element::getBundle(void)const " (?getBundle@Element@OSCBundle@juce@@QEBAAEBV23@XZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: class juce::OSCMessage const & __cdecl juce::OSCBundle::Element::getMessage(void)const " (?getMessage@Element@OSCBundle@juce@@QEBAAEBVOSCMessage@3@XZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCBundle::Element::isBundle(void)const " (?isBundle@Element@OSCBundle@juce@@QEBA_NXZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCBundle::Element::isMessage(void)const " (?isMessage@Element@OSCBundle@juce@@QEBA_NXZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: void __cdecl juce::OSCReceiver::removeListener(class juce::OSCReceiver::Listener<struct juce::OSCReceiver::RealtimeCallback> *)" (?removeListener@OSCReceiver@juce@@QEAAXPEAV?$Listener@URealtimeCallback@OSCReceiver@juce@@@12@@Z) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: void __cdecl juce::OSCReceiver::addListener(class juce::OSCReceiver::Listener<struct juce::OSCReceiver::RealtimeCallback> *)" (?addListener@OSCReceiver@juce@@QEAAXPEAV?$Listener@URealtimeCallback@OSCReceiver@juce@@@12@@Z) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: class juce::String __cdecl juce::OSCAddressPattern::toString(void)const " (?toString@OSCAddressPattern@juce@@QEBA?AVString@2@XZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCAddressPattern::matches(class juce::OSCAddress const &)const " (?matches@OSCAddressPattern@juce@@QEBA_NAEBVOSCAddress@2@@Z) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCAddressPattern::operator==(class juce::OSCAddressPattern const &)const " (??8OSCAddressPattern@juce@@QEBA_NAEBV01@@Z) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCAddressPattern::OSCAddressPattern(class juce::String const &)" (??0OSCAddressPattern@juce@@QEAA@AEBVString@1@@Z) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCAddressPattern::OSCAddressPattern(char const *)" (??0OSCAddressPattern@juce@@QEAA@PEBD@Z) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: static char const juce::OSCTypes::string" (?string@OSCTypes@juce@@2DB) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: class juce::OSCArgument const * __cdecl juce::OSCMessage::end(void)const " (?end@OSCMessage@juce@@QEBAPEBVOSCArgument@2@XZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: class juce::OSCArgument const * __cdecl juce::OSCMessage::begin(void)const " (?begin@OSCMessage@juce@@QEBAPEBVOSCArgument@2@XZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: class juce::OSCArgument const & __cdecl juce::OSCMessage::operator[](int)const " (??AOSCMessage@juce@@QEBAAEBVOSCArgument@1@H@Z) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCMessage::isEmpty(void)const " (?isEmpty@OSCMessage@juce@@QEBA_NXZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: int __cdecl juce::OSCMessage::size(void)const " (?size@OSCMessage@juce@@QEBAHXZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: class juce::OSCAddressPattern __cdecl juce::OSCMessage::getAddressPattern(void)const " (?getAddressPattern@OSCMessage@juce@@QEBA?AVOSCAddressPattern@2@XZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: class juce::String __cdecl juce::OSCArgument::getString(void)const " (?getString@OSCArgument@juce@@QEBA?AVString@2@XZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: float __cdecl juce::OSCArgument::getFloat32(void)const " (?getFloat32@OSCArgument@juce@@QEBAMXZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: int __cdecl juce::OSCArgument::getInt32(void)const " (?getInt32@OSCArgument@juce@@QEBAHXZ) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCAddress::OSCAddress(class juce::String const &)" (??0OSCAddress@juce@@QEAA@AEBVString@1@@Z) 1>include_hi_scripting_01.obj : error LNK2001: unresolved external symbol "public: static char const juce::OSCTypes::float32" (?float32@OSCTypes@juce@@2DB) 1>include_hi_scripting_02.obj : error LNK2001: unresolved external symbol "public: static char const juce::OSCTypes::blob" (?blob@OSCTypes@juce@@2DB) 1>include_hi_scripting_02.obj : error LNK2001: unresolved external symbol "public: void __cdecl juce::OSCReceiver::removeListener(class juce::OSCReceiver::Listener<struct juce::OSCReceiver::MessageLoopCallback> *)" (?removeListener@OSCReceiver@juce@@QEAAXPEAV?$Listener@UMessageLoopCallback@OSCReceiver@juce@@@12@@Z) 1>include_hi_scripting_02.obj : error LNK2001: unresolved external symbol "public: void __cdecl juce::OSCReceiver::addListener(class juce::OSCReceiver::Listener<struct juce::OSCReceiver::MessageLoopCallback> *)" (?addListener@OSCReceiver@juce@@QEAAXPEAV?$Listener@UMessageLoopCallback@OSCReceiver@juce@@@12@@Z) 1>include_hi_scripting_02.obj : error LNK2001: unresolved external symbol "public: class juce::MemoryBlock const & __cdecl juce::OSCArgument::getBlob(void)const " (?getBlob@OSCArgument@juce@@QEBAAEBVMemoryBlock@2@XZ) 1>include_hi_scripting_02.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCAddress::OSCAddress(char const *)" (??0OSCAddress@juce@@QEAA@PEBD@Z) 1>include_hi_scripting_02.obj : error LNK2001: unresolved external symbol "public: class juce::Time __cdecl juce::OSCTimeTag::toTime(void)const " (?toTime@OSCTimeTag@juce@@QEBA?AVTime@2@XZ) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: void __cdecl juce::OSCReceiver::registerFormatErrorHandler(class std::function<void __cdecl(char const *,int)>)" (?registerFormatErrorHandler@OSCReceiver@juce@@QEAAXV?$function@$$A6AXPEBDH@Z@std@@@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCReceiver::disconnect(void)" (?disconnect@OSCReceiver@juce@@QEAA_NXZ) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCReceiver::connect(int)" (?connect@OSCReceiver@juce@@QEAA_NH@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCReceiver::~OSCReceiver(void)" (??1OSCReceiver@juce@@QEAA@XZ) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCReceiver::OSCReceiver(class juce::String const &)" (??0OSCReceiver@juce@@QEAA@AEBVString@1@@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: void __cdecl juce::OSCMessage::addArgument(class juce::OSCArgument)" (?addArgument@OSCMessage@juce@@QEAAXVOSCArgument@2@@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCMessage::OSCMessage(class juce::OSCAddressPattern const &)" (??0OSCMessage@juce@@QEAA@AEBVOSCAddressPattern@1@@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCArgument::OSCArgument(int)" (??0OSCArgument@juce@@QEAA@H@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCArgument::OSCArgument(float)" (??0OSCArgument@juce@@QEAA@M@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCArgument::OSCArgument(class juce::String const &)" (??0OSCArgument@juce@@QEAA@AEBVString@1@@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCSender::send(class juce::OSCMessage const &)" (?send@OSCSender@juce@@QEAA_NAEBVOSCMessage@2@@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCSender::disconnect(void)" (?disconnect@OSCSender@juce@@QEAA_NXZ) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: bool __cdecl juce::OSCSender::connect(class juce::String const &,int)" (?connect@OSCSender@juce@@QEAA_NAEBVString@2@H@Z) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCSender::~OSCSender(void)" (??1OSCSender@juce@@QEAA@XZ) 1>include_hi_scripting_03.obj : error LNK2001: unresolved external symbol "public: __cdecl juce::OSCSender::OSCSender(void)" (??0OSCSender@juce@@QEAA@XZ) 1>E:\HISE\HISE-develop4\HISE\tools\snex_workbench\Builds\VisualStudio2017\x64\Release\App\\snex_workbench.exe : fatal error LNK1120: 45 unresolved externals 1>Done building project "snex_workbench_App.vcxproj" -- FAILED.
Tried with and without IPP, is there something in the Jucer file I'm missing?
-
@audiolyf Don't use the workbench, you can do it directly in HISE.
Set 'Allow Compilation' into your scriptFX :
Then menu : Export > Compile DSP Network as DLL
-
Yes the workbench is deprecated, I‘ll remove it soon in order to avoid confusion…
-
@Matt_SF Thanks! When I try to compile it from Export/Compile DSP networks as DLL I get "No class specified", hence the workbench rabbit hole I went down. Tried following every step available in other threads but I must have missed something?
-
@Christoph-Hart Any idea what I might be doing wrong for the node to not have a class specified?
-
@audiolyf I've never seen this error... Are you using an old HISE build ?
-
@Matt_SF Develop branch from about a month ago. Built the latest one now and same issue.
Could it be confusing things because there are multiple nodes to compile?
This is the "Frankenstein" inside of the main node:
Already tried changing ID of it to snexurator1 (don't know why it was "snexurator_")
These are in the project:
"snexurator" is the wrapper and snexurator1 the actual SNEX node.
-
So I was able to copy the XML of the node in DSPNetworks/Networks and load it in another project - where DLL compiling worked. How do I load the DLL in my original project now?
-
@audiolyf Ah I recall now. This erreor happens because you're trying to compile a scriptFX which contains nodes that are already compiled.
Leave them uncompiled and compile the whole thing -
@Matt_SF Thank you so much!
So just to clarify, I leave AllowCompilation enabled on the main node, and make sure it's disabled on any children? -
@audiolyf leave the children alone like this :
and yes, turn on 'Allow Compilation" and then menu > export DLL
Also I would advise not to copy scriptnode/DLL files between projects as that might mess things up.
Edit : changed the image tp the correct one.
-
@Matt_SF or in this case, just don't use any child networks and just put the SNEX node in the main graph.
-
@Matt_SF Sorry for the rounds, I'm still getting errors.
What I did now:
- Explode the child, leave it in the node as the Frankenstein-version
- Turn on AllowCompilation.
- Save the network
- Compile DSP networks as dll
I can't seem to allow only one of them to compile though, it still wants to compile both "Dist" (the whole scriptFx node) and snexurator.
I WAS able to get past Dist not having a class, but got this error on compiling:
\dspnetworks\binaries\source\snexurator.h(57): error C2535: 'void snexurator_impl::snexuration<NumVoices>::setParameter(double)': member function already defined or declared
After that, it still told me to reload HISE to use it, but it didn't seem to do anything. Exporting the VST tells me I need to wrap snexurator into a compilable DSP network, so I'm back to square one I guess.
What do I need to wrap to wrap it up?
-
@audiolyf @Christoph-Hart ah my bad, I went too fast and took the wrong pic. I meant to say, leave the original nodes (with your code of course) not-wrapped:
And then compile the whole thing
-
Still this :(
-
Rebuilt the whole thing from scratch, removed the old networks, cleaned build directory, and I'm "able" to compile but I'm getting this fail:
..\dspnetworks\binaries\source\sat.h(86): error C2535: 'void sat_impl::pens<NumVoices>:: setParameter(double)': member function already defined or declared (compiling source file ..\..\Source\Main.cpp) [..\DspNetworks\Binaries\Builds\VisualStudio2017\808_DynamicLibrary.vcxproj]
-
@audiolyf what is written in this line?
-
@Matt_SF I'm scratching my head bald trying to figure out what exactly it stems from, tried making a completely new project in case it was something declared in the project that it pulls from and got the same error:
\penis.h(57): error C2535: 'void penis_impl::ass<NumVoice s>::setParameter(double)': member function already defined or declared (compiling source file ..\..\Source\Main.cpp) [E :\Projects\Soundkits\Plugins\snes\DspNetworks\Binaries\Builds\VisualStudio2017\snes_DynamicLibrary.vcxproj]
So with my 0.0005% C++ knowledge what I take from this is that some function has already been declared somewhere else and this can't take its place, or that it maybe has something to do with the number of voices processed :beaming_face_with_smiling_eyes:
Excuse my frustration coming through in the nodes.
-
@audiolyf maybe the compiler doesn't like the name you gave to the scriptFx
But in this file:
penis.h
what does the line (57) says?Edit : same question with this one :
dspnetworks\binaries\source\sat.h(86)
-
@Matt_SF AAAAH now I see what you mean!
Jesus christ I see it. I've declared the parameter control twice:
template <int P> void setParameter(double v) { }
Fixed and successfully compiled!
Now how do I use it? Add it as a hardcoded FX , remove my ScriptFX network and change my interface references?
Then if I want to make changes to the network I have to do it all over?Thank you so much you've made my day, finally feel like I've actually accomplished something this week and learned a bunch on the way.