Tips for linux development

Hi all,

sorry if this is somewhat off-topic here, but I’m new to this area of programming trying to get to grips with a couple of things. I’d basically like to ask for some advice on strategies for developing audio plugins (VST) on linux. The foremost problem I have is that the dev-cycle is quite long writing code, compiling and opening the result in a host app (renoise) just to see that something went wrong. I’m looking for a lightweight vst plugin host on linux thats suitable for development and debugging, but only solution that seems fitting is the example plugin host, which I can’t manage to compile atm (I saw the thread, can’t seem to be able to compile neither git head nor stabel 2.0). Maybe somebody can give me a hint where I should look? Besides, I’d appreciate any advice on development methodologies particular to linux.
Thanks,

karsten

What’s going wrong when you try to build the projects?

when I try to build git:

~/src/misc/juce/juce-git/extras/audio plugin host/Builds/Linux (git:master?): make
make: *** No rule to make target `../../Source/../JuceLibraryCode/modules/juce_opengl/../../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.h', needed by `build/intermediate/Debug/FilterGraph_62e9c017.o'.  Stop.

that file does not actuall exist in the tree. when trying to build stable 2.0 I get this error:

Compiling juce_audio_processors.cpp
In file included from ../../../../modules/juce_audio_processors/juce_audio_processors.cpp:73:0:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1865:40: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1865:78: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1886:40: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1886:80: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1890:36: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1926:41: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1931:44: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1939:41: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1939:78: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1949:41: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1949:78: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1974:34: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1976:31: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:2004:41: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:2006:38: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:2021:41: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:2023:38: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:2043:41: warning: multi-character character constant [-Wmultichar]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:2045:38: warning: multi-character character constant [-Wmultichar]
In file included from /home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffectx.h:17:0,
                 from ../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:57,
                 from ../../../../modules/juce_audio_processors/juce_audio_processors.cpp:73:
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:125:32: error: expected ‘)’ before ‘*’ token
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:126:32: error: expected ‘)’ before ‘*’ token
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:127:27: error: expected ‘)’ before ‘*’ token
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:128:27: error: expected ‘)’ before ‘*’ token
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:129:27: error: expected ‘)’ before ‘*’ token
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:130:28: error: expected ‘)’ before ‘*’ token
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:149:2: error: ‘AEffectDispatcherProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:152:2: error: ‘AEffectProcessProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:155:2: error: ‘AEffectSetParameterProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:158:2: error: ‘AEffectGetParameterProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:183:2: error: ‘AEffectProcessProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:187:2: error: ‘AEffectProcessDoubleProc’ does not name a type
In file included from ../../../../modules/juce_audio_processors/juce_audio_processors.cpp:73:0:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:176:31: error: expected ‘)’ before ‘*’ token
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:176:31: error: expected initializer before ‘*’ token
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:178:30: error: expected initializer before ‘audioMaster’
In file included from ../../../../modules/juce_audio_processors/juce_audio_processors.cpp:73:0:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:236:8: error: ‘XContext’ does not name a type
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:344:5: error: ‘MainCall’ does not name a type
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp: In constructor ‘juce::ModuleHandle::ModuleHandle(const juce::File&)’:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:384:11: error: class ‘juce::ModuleHandle’ does not have any field named ‘moduleMain’
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp: In member function ‘bool juce::ModuleHandle::open()’:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:427:9: error: ‘moduleMain’ was not declared in this scope
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:427:23: error: ‘MainCall’ was not declared in this scope
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:427:33: error: expected ‘;’ before ‘module’
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:430:37: error: expected ‘;’ before ‘module’
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp: In member function ‘void juce::ModuleHandle::closeEffect(juce::AEffect*)’:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:444:14: error: ‘struct juce::AEffect’ has no member named ‘dispatcher’
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp: In constructor ‘juce::VSTPluginInstance::VSTPluginInstance(const juce::ReferenceCountedObjectPtr<juce::ModuleHandle>&)’:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:842:30: error: ‘class juce::ModuleHandle’ has no member named ‘moduleMain’
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:842:43: error: ‘audioMaster’ was not declared in this scope
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp: In member function ‘virtual void juce::VSTPluginInstance::processBlock(juce::AudioSampleBuffer&, juce::MidiBuffer&)’:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1045:25: error: ‘struct juce::AEffect’ has no member named ‘dispatcher’
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1057:25: error: ‘struct juce::AEffect’ has no member named ‘processReplacing’
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1069:25: error: ‘struct juce::AEffect’ has no member named ‘process’
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp: In member function ‘void juce::VSTPluginWindow::openPluginWindow()’:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:1466:108: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp: In member function ‘int juce::VSTPluginInstance::dispatch(int, int, int, void*, float) const’:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:2132:30: error: ‘struct juce::AEffect’ has no member named ‘dispatcher’
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp: At global scope:
../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp:2347:30: error: expected initializer before ‘audioMaster’
../../../../modules/juce_audio_processors/juce_audio_processors.cpp:80:1: error: expected ‘}’ at end of input
make: *** [build/intermediate/Debug/juce_audio_processors_eb9ae116.o] Error 1

not sure if its a typo in the source or whats going wrong. any hints appreciated.

k

looking around the compilation error is related to this thread http://www.rawmaterialsoftware.com/viewtopic.php?f=5&t=3449, i.e. a regression maybe? seems like teh file was renamed right?

I’ll keep digging.

There’s absolutely nothing in the codebase that makes any reference to openglcomponent.h, so if that’s your error, you must have some old code lying around - try making a new, clean, check-out?

right, the opengl problem must have been some remnants of old code/projects. I get a bit further now, but not quite there. I now get the above error related to some undefined classes/types:

/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:149:2: error: ‘AEffectDispatcherProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:152:2: error: ‘AEffectProcessProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:155:2: error: ‘AEffectSetParameterProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:158:2: error: ‘AEffectGetParameterProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:183:2: error: ‘AEffectProcessProc’ does not name a type
/home/k/src/vstsdk/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h:187:2: error: ‘AEffectProcessDoubleProc’ does not name a type

I can see that for instance AEffectDispatcherProc is typedef’ed in vstsdk2.4/pluginterfaces/vst2.x/aeffect.h line 126 but simply #including aeffect.h doesn’t solve the problem. hmm

Have you tried the patch I suggested here: http://www.rawmaterialsoftware.com/viewtopic.php?f=5&t=3887&start=15#p51310 ?

some of the changes in your patch already seem to be in tip, so I only added what was left. However, it doesn’t seem to solve the problem unfortunately. I don’t yet understand how and where

‘AEffectDispatcherProc’ 
‘AEffectProcessProc’ 
‘AEffectSetParameterProc’ 
‘AEffectGetParameterProc’ 
‘AEffectProcessProc’ 
‘AEffectProcessDoubleProc’

are declared, hm