VST2 FX not accepted by Host on LInux

Hello all,
i’m new to the forum and new to JUCE at all, so forgive me, if this question is a noob question. :wink:
i recently built an simple stereo multi FX bank in the Faust Language for typical glitch FX (stutter, reverse, gater,…). I read this tutorial about integrating Faust generated code into JUCE, so i first tried to port my FX to a JUCE Standalon App which worked without issues. Then i wanted to compile a VST2 FX from the code, i set up the paths to the SDK correctly and set the Project Settings to build a VST2 FX. Compilation and linking ran without any warnings or issues, but the .so-file won’t be recognized by my Hosts (Carla, Ardour,…) somehow. When i drag and drop the plugin into Carla (what works with proper VST plugins), Carla crashes.
I then tried to build a VST2 FX with an empty “Hello World” code. This worked without problems, Carla found the plugin imediately, which leads me to the guess, that i missed something within the code or in the project settings. But on the first sight, i cannot find any big differences. Are there maybe common mistakes that lead to such errors? Any help would be appriciated! :slight_smile: Thanks in advance,


my environment:
OS: Linux Mint 19.3 Tricia
CPU: Quad Core AMD A8-3870 APU with Radeon HD Graphics (-MCP-) speed/min/max: 2548/800/3000 MHz
Kernel: 5.0.0-32-generic x86_64 Up: 43m Mem: 1416.9/7431.8 MiB (19.1%) Storage: 931.51 GiB (9.7% used) Procs: 245
Shell: bash 4.4.20 inxi: 3.0.32

i don’t know much about coding and debugging but i let Carla crash again by drag and drop the plugin into Carla and looked for a coredump, which i fed in gdb with “thread apply all bt”. This is what gdb spits out:

Fri 2019-12-20 23:10:38 CET   18098  1000  1000  11 present   /usr/lib/carla/carla-discovery-native
Fri 2019-12-20 23:11:52 CET   17932  1000  1000  11 present   /usr/bin/python3.6
Fri 2019-12-20 23:12:15 CET   18425  1000  1000  11 present   /usr/bin/python3.6
toxonic@toxonic-Satellite-L500:~$ coredumpctl gdb 18098
           PID: 18098 (carla-discovery)
           UID: 1000 (toxonic)
           GID: 1000 (toxonic)
        Signal: 11 (SEGV)
     Timestamp: Fri 2019-12-20 23:10:38 CET (2min 54s ago)
  Command Line: /usr/lib/carla/carla-discovery-native VST2 /home/toxonic/.vst/t_glitch.so
    Executable: /usr/lib/carla/carla-discovery-native
 Control Group: /user.slice/user-1000.slice/session-c2.scope
          Unit: session-c2.scope
         Slice: user-1000.slice
       Session: c2
     Owner UID: 1000 (toxonic)
       Boot ID: c806400e244341c1b07e56e6387ce356
    Machine ID: f3d85c83fd6e458aba76dbf56f683032
      Hostname: toxonic-Satellite-L500
       Storage: /var/lib/systemd/coredump/core.carla-discovery.1000.c806400e244341c1b07e56e6387ce356.18098.1576879838000000.lz4
       Message: Process 18098 (carla-discovery) of user 1000 dumped core.
                Stack trace of thread 18098:
                #0  0x00007fc9ac136f78 n/a (/home/toxonic/.vst/t_glitch.so)
                #1  0x00007fc9ac1375f4 n/a (/home/toxonic/.vst/t_glitch.so)
                #2  0x00007fc9ac13637f n/a (/home/toxonic/.vst/t_glitch.so)
                #3  0x00007fc9ac11d369 n/a (/home/toxonic/.vst/t_glitch.so)
                #4  0x00007fc9ac1107d5 n/a (/home/toxonic/.vst/t_glitch.so)
                #5  0x00007fc9ac1111b8 n/a (/home/toxonic/.vst/t_glitch.so)
                #6  0x00007fc9abd33c70 n/a (/home/toxonic/.vst/t_glitch.so)
                #7  0x00007fc9abcdd5d4 n/a (/home/toxonic/.vst/t_glitch.so)
                #8  0x00007fc9abcdd781 n/a (/home/toxonic/.vst/t_glitch.so)
                #9  0x0000563c810be4f5 n/a (carla-discovery-native)
                #10 0x0000563c810abbe8 n/a (carla-discovery-native)
                #11 0x00007fc9acc29b97 __libc_start_main (libc.so.6)
                #12 0x0000563c810b172a n/a (carla-discovery-native)
                Stack trace of thread 18099:
                #0  0x00007fc9ade869f3 futex_wait_cancelable (libpthread.so.0)
                #1  0x00007fc9abdd6c0e n/a (/home/toxonic/.vst/t_glitch.so)
                #2  0x00007fc9abe5739f n/a (/home/toxonic/.vst/t_glitch.so)
                #3  0x00007fc9abe5993d n/a (/home/toxonic/.vst/t_glitch.so)
                #4  0x00007fc9abe67f9e n/a (/home/toxonic/.vst/t_glitch.so)
                #5  0x00007fc9abe59f3c n/a (/home/toxonic/.vst/t_glitch.so)
                #6  0x00007fc9abe5525c n/a (/home/toxonic/.vst/t_glitch.so)
                #7  0x00007fc9abe4fc74 n/a (/home/toxonic/.vst/t_glitch.so)
                #8  0x00007fc9abcdeff4 n/a (/home/toxonic/.vst/t_glitch.so)
                #9  0x00007fc9abdb5bdd n/a (/home/toxonic/.vst/t_glitch.so)
                #10 0x00007fc9abdb5cca n/a (/home/toxonic/.vst/t_glitch.so)
                #11 0x00007fc9abdd914c n/a (/home/toxonic/.vst/t_glitch.so)
                #12 0x00007fc9ade806db start_thread (libpthread.so.0)
                #13 0x00007fc9acd2988f __clone (libc.so.6)

GNU gdb (Ubuntu 8.1-0ubuntu3.2)
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
Find the GDB manual and other documentation resources online at:
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/lib/carla/carla-discovery-native...(no debugging symbols found)...fertig.

Warnung: core file may not match specified executable file.
[New LWP 18098]
[New LWP 18099]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/lib/carla/carla-discovery-native VST2 /home/toxonic/.vst/t_glitch.so'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007fc9ac136f78 in juceaudio::prepareToPlay (this=0x563c82019fc0)
    at ../../../dsp-faust/DspFaust.cpp:15883
15883	../../../dsp-faust/DspFaust.cpp: Datei oder Verzeichnis nicht gefunden.
[Current thread is 1 (Thread 0x7fc9ae69b740 (LWP 18098))]
(gdb) thread apply all bt

Thread 2 (Thread 0x7fc992791700 (LWP 18099)):
#0  0x00007fc9ade869f3 in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x563c81fe5bd8) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  0x00007fc9ade869f3 in __pthread_cond_wait_common (abstime=0x0, mutex=0x563c81fe5be0, cond=0x563c81fe5bb0) at pthread_cond_wait.c:502
#2  0x00007fc9ade869f3 in __pthread_cond_wait (cond=0x563c81fe5bb0, mutex=0x563c81fe5be0)
    at pthread_cond_wait.c:655
#3  0x00007fc9abdd6c0e in juce::WaitableEvent::wait(int) const (this=0x563c81fe5bb0, timeOutMillisecs=-1)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_core/native/juce_posix_SharedCode.h:74
#4  0x00007fc9abe5739f in juce::MessageManager::Lock::BlockingMessage::messageCallback() (this=0x563c81fe5b70)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_events/messages/juce_MessageManager.cpp:276
#5  0x00007fc9abe5993d in juce::InternalMessageQueue::InternalMessageQueue()::{lambda(int)#1}::operator()(int) const (__closure=0x7fc98c000c20, _fd=4)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_events/native/juce_linux_Messaging.cpp:50
#6  0x00007fc9abe67f9e in juce::LinuxEventLoop::CallbackFunction<juce::InternalMessageQueue::InternalMessageQueue()::{lambda(int)#1}>::operator()(int) (this=0x7fc98c000c10, fd=4)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_events/native/juce_linux_EventLoop.h:42
---Type <return> to continue, or q <return> to quit---
#7  0x00007fc9abe59f3c in juce::InternalMessageQueue::dispatchNextEvent() (this=0x7fc98c000b90)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_events/native/juce_linux_Messaging.cpp:121
#8  0x00007fc9abe5525c in juce::MessageManager::dispatchNextMessageOnSystemQueue(bool) (returnIfNoPendingMessages=true)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_events/native/juce_linux_Messaging.cpp:237
#9  0x00007fc9abe4fc74 in juce::MessageManager::runDispatchLoopUntil(int) (this=0x7fc98c000b60, millisecondsToRunFor=250)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_events/messages/juce_MessageManager.cpp:92
#10 0x00007fc9abcdeff4 in SharedMessageThread::run() (this=0x563c82019390)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp:233
#11 0x00007fc9abdb5bdd in juce::Thread::threadEntryPoint() (this=0x563c82019390)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_core/threads/juce_Thread.cpp:96
#12 0x00007fc9abdb5cca in juce::juce_threadEntryPoint(void*) (userData=0x563c82019390)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_core/threads/juce_Thread.cpp:118
#13 0x00007fc9abdd914c in juce::threadEntryProc(void*) (userData=0x563c82019390)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_core/native/juce_posix_SharedCode.h:897
---Type <return> to continue, or q <return> to quit---
#14 0x00007fc9ade806db in start_thread (arg=0x7fc992791700) at pthread_create.c:463
#15 0x00007fc9acd2988f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 1 (Thread 0x7fc9ae69b740 (LWP 18098)):
#0  0x00007fc9ac136f78 in juceaudio::prepareToPlay(int, double) (this=0x563c82019fc0)
    at ../../../dsp-faust/DspFaust.cpp:15883
#1  0x00007fc9ac1375f4 in juceaudio::start() (this=0x563c82019fc0) at ../../../dsp-faust/DspFaust.cpp:15934
#2  0x00007fc9ac13637f in FaustPolyEngine::start() (this=0x563c8201b200)
    at ../../../dsp-faust/DspFaust.cpp:10288
#3  0x00007fc9ac11d369 in DspFaust::start() (this=0x563c82019878) at ../../../dsp-faust/DspFaust.cpp:22957
#4  0x00007fc9ac1107d5 in T_glitchAudioProcessor::T_glitchAudioProcessor() (this=0x563c82019710)
    at ../../Source/PluginProcessor.cpp:27
#5  0x00007fc9ac1111b8 in createPluginFilter() () at ../../Source/PluginProcessor.cpp:286
#6  0x00007fc9abd33c70 in createPluginFilterOfType(juce::AudioProcessor::WrapperType) (type=juce::AudioProcessor::wrapperType_VST)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp:182
#7  0x00007fc9abcdd5d4 in (anonymous namespace)::pluginEntryPoint(Vst2::audioMasterCallback) (audioMaster=0x563c810b3c30)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp:2314
#8  0x00007fc9abcdd781 in VSTPluginMain(Vst2::audioMasterCallback) (audioMaster=0x563c810b3c30)
    at /home/toxonic/Source Applications/HISE/HISE-scriptnode/JUCE/modules/juce_audio_plugin_client/VST/juce---Type <return> to continue, or q <return> to quit---
#9  0x0000563c810be4f5 in  ()
#10 0x0000563c810abbe8 in  ()
#11 0x00007fc9acc29b97 in __libc_start_main (main=
    0x563c810ab400, argc=3, argv=0x7ffff68140a8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffff6814098) at ../csu/libc-start.c:310
#12 0x0000563c810b172a in  ()

Because of the line…

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007fc9ac136f78 in juceaudio::prepareToPlay (this=0x563c82019fc0)
    at ../../../dsp-faust/DspFaust.cpp:15883

… i looked it up in DspFaust.cpp, in the following function:

        void prepareToPlay(int, double) override
            const BigInteger activeInputChannels = deviceManager.getCurrentAudioDevice()->getActiveInputChannels();
            const BigInteger activeOutputChannels = deviceManager.getCurrentAudioDevice()->getActiveOutputChannels();
            const int maxInputChannels = activeInputChannels.getHighestBit() + 1;
            const int maxOutputChannels = activeOutputChannels.getHighestBit() + 1;

it is the line:

const BigInteger activeInputChannels = deviceManager.getCurrentAudioDevice()->getActiveInputChannels();

makes me think, it has got something to do with the audio device? any ideas?

Have your tried faust2juce to prepare your JUCE code (see https://github.com/grame-cncm/faust/tree/master-dev/architecture/juce) instead of faust2api ?

Hello Stéphane, yeah - i recently tried that (didn’t even know before about faust2juce…) and it compiled fine to VST2 and the gui is quiet satisfying for the beginning but somehow a whole lot of my logic from the Faust DSP seems messed up, some FX are not working or not as they were intended to. only one or two effects worked as they should (a tape stop effect and a SR reducer / bit quantizer). similar but not that heavy issues happen with faust2vst, e.g. notelength to sample conversions don’t work as they did in jack application or lv2 plugin. however, i’m trying to figure out, what is wrong inside that code, but i know very less abou c++, so this will be a pain in the a__ regarding over 15000 lines of code! :-/

Before trying to debug the C++ code (…), you should post your problematic DSP code on the Faust mailing list, describing what you are trying to achieve.

Yeah, okay., i will do that. I already opend a thread there regarding this issue, i will post the code there! Thank you! :slight_smile: