Tips for linux development


#1

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


#2

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


#3

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


#4

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.


#5

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?


#6

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


#7

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


#8

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