Surge: Make Linux build

Created on 27 Sep 2018  ·  93Comments  ·  Source: surge-synthesizer/surge

Thanks for DAW's like Ardour, Renoise, Bitwig and or Tracktion - Linux made its mark in the music world. Many plugin vendors did start already porting their products (check U-HE for example).

It would be great to have Linux build of this synth,

Linux

Most helpful comment

All 93 comments

Looking forward to be able to build it on linux!

OK, so I just started tinkering with the Linux building thing and I managed to make it compile on the current version, the VST2 build. I don't know how to make it work though, tried running it with Reaper 5.95 on Ubuntu 16.04 but no luck - I suppose the Debug-surge.so file it creates (under the target folder) is not valid or something, or there is external data and files that I am not providing (skin, presets?). I'm attaching here the code of the current state. My repository is here: BuildSurgeOnLinux

# Install libgtkmm-3.0-dev and libcairo2-dev
echo "############################################################"
echo "# THIS SCRIPT NEEDS THE FOLLOWING SPECIAL PACKAGES:        #"
echo "# libgtkmm-3.0-dev libcairo2-dev                           #"
echo "# MAKE SURE YOU HAVE THEM OR COMPILATION WILL THROW ERRORS #"
echo "############################################################"

# Try to remove previous compilations
echo "REMOVING PREVIOUS BUILD FILES"
rm -rf surge VST_SDK
# First, clone Surge repo and update submodules
echo "CLONING SURGE REPO"
git clone https://github.com/kurasu/surge.git
echo "MOVING INTO SURGE FOLDER"
cd surge
echo "UPDATING GIT SUBMODULES"
git submodule update --init --recursive
# Then download VST_SDK file
echo "MOVING TO PARENT DIRECTORY"
cd ..
echo "RETRIEVING VST3SDK PACKAGE FROM STEINBERG"
wget https://www.steinberg.net/vst3sdk
# Extract it and remove the zip
echo "EXTRACTING VST3SDK ZIP PACKAGE"
unzip vst3sdk*
echo "REMOVING VST3SDK ZIP"
# Copy the vst2 stuff to the vst3 folder in Surge
echo "COPYING VST2 FILES TO surge/vst3sdk/"
cp -r VST_SDK/VST2_SDK/* surge/vst3sdk/
# Download premake5 and extract it here
# REPLACE WITH THE LATEST VERSION OF PREMAKE DOWNLOAD IF YOU WANT
echo "RETRIEVING PREMAKE5 PACKAGE"
wget https://github.com/premake/premake-core/releases/download/v5.0.0-alpha12/premake-5.0.0-alpha12-linux.tar.gz
echo "EXTRACTING PREMAKE5 PACKAGE"
tar -xvf premake-5*
# Remove premake5 tar.gz
echo "REMOVING PREMAKE5 TAR.GZ PACKAGE"
# Move premake5 bin to surge folder
echo "MOVING PREMAKE5 BINARY TO SURGE FOLDER"
mv premake5 surge/
# Build makefiles with premake
echo "ENTERING SURGE FOLDER"
cd surge
echo "RUNNING premake5 gmake2"
./premake5 gmake2
# make the vst2
echo "RUNNING surge-vst2.make"
make -f surge-vst2.make
# make the vst3
#make -f surge-vst3.make

Any contribution is appreciated and more than welcome, of course :)

Yes I have tried too with Ubuntu 18,it compiles well it builds the .so file but I can't open it in any open source DAW!
More precisely it is not detectable. Carla or JUCE audio plugin host can't detect the plugin as well.
I have tried the following:
premake5 --cc=gcc --os=linux gmake (if i am not wrong gmake is better than gmake2)
then
make config=release_x64

the vst2 is going to be built successfully but not the same for the vst3(anyway linux has long way to go with vst3 plugins,i can only use the steinberg's editorhost to open a vst3 example) .
Anyway,even so, the vst2 .so file (which is around 19Mb) won't open
I didn't have time to search the reason but I guess is something related to vst sdk version or vstgui???
I am not an experienced programmer though (((

I'm having the same problems. I can build the plugin fine as a VST2 but it won't instantiate in Bitwig or Ardour. I'm building it here on Fedora 23, with GCC 5.3.1. The only error thrown by Bitwig is the rather unhelpful "Could not read metadata" message.

To compile on linux, see this pull request: https://github.com/kurasu/surge/pull/20

Also, the reason the current state doesn't load is probably because of missing symbols.
Run "ldd -r ldd -r target/vst2/Debug/Surge-Debug.so" to check that. This should probably be added to the build system.

If you compiled it successfully, it should look like this:

[kjetil@localhost surge]$ ldd -r target/vst2/Debug/Surge-Debug.so 
        linux-vdso.so.1 (0x00007ffd65b41000)
        libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007fcd0279e000)
        libxcb-cursor.so.0 => /lib64/libxcb-cursor.so.0 (0x00007fcd02597000)
        libxcb.so.1 => /lib64/libxcb.so.1 (0x00007fcd02375000)
        libxkbcommon-x11.so.0 => /lib64/libxkbcommon-x11.so.0 (0x00007fcd0216d000)
        libxkbcommon.so.0 => /lib64/libxkbcommon.so.0 (0x00007fcd01f2c000)
        libcairo.so.2 => /lib64/libcairo.so.2 (0x00007fcd01c03000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcd019e6000)
        libstdc++.so.6 => /home/kjetil/gcc-7.1.0_install/lib64/libstdc++.so.6 (0x00007fcd01663000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fcd0135b000)
        libgcc_s.so.1 => /home/kjetil/gcc-7.1.0_install/lib64/libgcc_s.so.1 (0x00007fcd01144000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fcd00d82000)
        libz.so.1 => /lib64/libz.so.1 (0x00007fcd00b6c000)
        libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fcd0095c000)
        libpng16.so.16 => /lib64/libpng16.so.16 (0x00007fcd00729000)
        libxcb-render-util.so.0 => /lib64/libxcb-render-util.so.0 (0x00007fcd00525000)
        libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007fcd0031b000)
        libxcb-image.so.0 => /lib64/libxcb-image.so.0 (0x00007fcd00115000)
        libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007fccfff11000)
        libXau.so.6 => /lib64/libXau.so.6 (0x00007fccffd0d000)
        libxcb-xkb.so.1 => /usr/lib64/libxcb-xkb.so.1 (0x00007fccffaf0000)
        libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007fccff849000)
        libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007fccff605000)
        libEGL.so.1 => /lib64/libEGL.so.1 (0x00007fccff3f1000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fccff1ed000)
        libXrender.so.1 => /lib64/libXrender.so.1 (0x00007fccfefe3000)
        libX11.so.6 => /lib64/libX11.so.6 (0x00007fccfeca1000)
        libXext.so.6 => /lib64/libXext.so.6 (0x00007fccfea8f000)
        libGL.so.1 => /lib64/libGL.so.1 (0x00007fccfe7eb000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fccfe5e2000)
        /lib64/ld-linux-x86-64.so.2 (0x000055ff0498e000)
        libxcb-util.so.1 => /lib64/libxcb-util.so.1 (0x00007fccfe3dc000)
        libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fccfe1b1000)
        libGLdispatch.so.0 => /lib64/libGLdispatch.so.0 (0x00007fccfdee3000)
        libGLX.so.0 => /lib64/libGLX.so.0 (0x00007fccfdcb2000)
[kjetil@localhost surge]$ 

Hey Kjetil, Thanks for the assistance ! As I mentioned I can build the VST2 without problems. I ran ldd as per your instructions, got the following result, complete with a report of missing symbols. What stage did I miss ?

[dlphilp@The6300 surge]$ ldd -r target/vst2/Debug/Surge-Debug.so
linux-vdso.so.1 (0x00007ffc1e5f7000)
libgtkmm-3.0.so.1 => /lib64/libgtkmm-3.0.so.1 (0x00007f4da463c000)
libatkmm-1.6.so.1 => /lib64/libatkmm-1.6.so.1 (0x00007f4da43ec000)
libgdkmm-3.0.so.1 => /lib64/libgdkmm-3.0.so.1 (0x00007f4da419c000)
libgiomm-2.4.so.1 => /lib64/libgiomm-2.4.so.1 (0x00007f4da3de4000)
libpangomm-1.4.so.1 => /lib64/libpangomm-1.4.so.1 (0x00007f4da3bb4000)
libglibmm-2.4.so.1 => /lib64/libglibmm-2.4.so.1 (0x00007f4da3934000)
libgtk-3.so.0 => /lib64/libgtk-3.so.0 (0x00007f4da3004000)
libgdk-3.so.0 => /lib64/libgdk-3.so.0 (0x00007f4da2d34000)
libpangocairo-1.0.so.0 => /lib64/libpangocairo-1.0.so.0 (0x00007f4da2b24000)
libpango-1.0.so.0 => /lib64/libpango-1.0.so.0 (0x00007f4da28d4000)
libatk-1.0.so.0 => /lib64/libatk-1.0.so.0 (0x00007f4da26ac000)
libcairo-gobject.so.2 => /lib64/libcairo-gobject.so.2 (0x00007f4da249c000)
libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007f4da211c000)
libcairomm-1.0.so.1 => /lib64/libcairomm-1.0.so.1 (0x00007f4da1ef4000)
libcairo.so.2 => /lib64/libcairo.so.2 (0x00007f4da1bc4000)
libsigc-2.0.so.0 => /lib64/libsigc-2.0.so.0 (0x00007f4da19bc000)
libgdk_pixbuf-2.0.so.0 => /lib64/libgdk_pixbuf-2.0.so.0 (0x00007f4da1794000)
libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f4da153c000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f4da11fc000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4da0fdc000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f4da0c54000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4da094c000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f4da0734000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4da036c000)
libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f4da0164000)
libX11.so.6 => /lib64/libX11.so.6 (0x00007f4d9fe24000)
libXi.so.6 => /lib64/libXi.so.6 (0x00007f4d9fc0c000)
libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007f4d9fa04000)
libatk-bridge-2.0.so.0 => /lib64/libatk-bridge-2.0.so.0 (0x00007f4d9f7d4000)
libepoxy.so.0 => /lib64/libepoxy.so.0 (0x00007f4d9f4d4000)
libpangoft2-1.0.so.0 => /lib64/libpangoft2-1.0.so.0 (0x00007f4d9f2bc000)
libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007f4d9f074000)
libXinerama.so.1 => /lib64/libXinerama.so.1 (0x00007f4d9ee6c000)
libXrandr.so.2 => /lib64/libXrandr.so.2 (0x00007f4d9ec5c000)
libXcursor.so.1 => /lib64/libXcursor.so.1 (0x00007f4d9ea4c000)
libXcomposite.so.1 => /lib64/libXcomposite.so.1 (0x00007f4d9e844000)
libXdamage.so.1 => /lib64/libXdamage.so.1 (0x00007f4d9e63c000)
libxkbcommon.so.0 => /lib64/libxkbcommon.so.0 (0x00007f4d9e3fc000)
libwayland-cursor.so.0 => /lib64/libwayland-cursor.so.0 (0x00007f4d9e1f4000)
libwayland-egl.so.1 => /lib64/libwayland-egl.so.1 (0x00007f4d9dfec000)
libwayland-client.so.0 => /lib64/libwayland-client.so.0 (0x00007f4d9dddc000)
libXext.so.6 => /lib64/libXext.so.6 (0x00007f4d9dbc4000)
librt.so.1 => /lib64/librt.so.1 (0x00007f4d9d9bc000)
libthai.so.0 => /lib64/libthai.so.0 (0x00007f4d9d7ac000)
libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f4d9d5a4000)
libharfbuzz.so.0 => /lib64/libharfbuzz.so.0 (0x00007f4d9d33c000)
libfreetype.so.6 => /usr/lib64/freetype-freeworld/libfreetype.so.6 (0x00007f4d9d08c000)
libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007f4d9cde4000)
libEGL.so.1 => /usr/lib64/nvidia-340xx/libEGL.so.1 (0x00007f4d9cad4000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4d9c8cc000)
libpng16.so.16 => /lib64/libpng16.so.16 (0x00007f4d9c694000)
libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007f4d9c48c000)
libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007f4d9c27c000)
libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f4d9c054000)
libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f4d9be44000)
libz.so.1 => /lib64/libz.so.1 (0x00007f4d9bc2c000)
libGL.so.1 => /usr/lib64/nvidia-340xx/libGL.so.1 (0x00007f4d9b8dc000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f4d9b6b4000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f4d9b494000)
libffi.so.6 => /lib64/libffi.so.6 (0x00007f4d9b28c000)
/lib64/ld-linux-x86-64.so.2 (0x0000559be5100000)
libatspi.so.0 => /lib64/libatspi.so.0 (0x00007f4d9b054000)
libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00007f4d9adfc000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f4d9abcc000)
libdatrie.so.1 => /lib64/libdatrie.so.1 (0x00007f4d9a9c4000)
libgraphite2.so.3 => /lib64/libgraphite2.so.3 (0x00007f4d9a794000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f4d9a584000)
libnvidia-glsi.so.340.98 => /usr/lib64/nvidia-340xx/libnvidia-glsi.so.340.98 (0x00007f4d9a2fc000)
libXau.so.6 => /lib64/libXau.so.6 (0x00007f4d9a0f4000)
libnvidia-tls.so.340.98 => /usr/lib64/nvidia-340xx/tls/libnvidia-tls.so.340.98 (0x00007f4d99eec000)
libnvidia-glcore.so.340.98 => /usr/lib64/nvidia-340xx/libnvidia-glcore.so.340.98 (0x00007f4d972d4000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f4d9705c000)
libsystemd.so.0 => /lib64/libsystemd.so.0 (0x00007f4d96fd4000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f4d96dac000)
libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007f4d96ac4000)
libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007f4d968ac000)
libdw.so.1 => /lib64/libdw.so.1 (0x00007f4d9665c000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f4d96454000)
libelf.so.1 => /lib64/libelf.so.1 (0x00007f4d9623c000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f4d96034000)
undefined symbol: _ZN12AudioEffectX10dispatcherEiilPvf (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect21setParameterAutomatedEif (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect19canProcessReplacingEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect18canDoubleReplacingEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect17programsAreChunksEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect15setInitialDelayEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect16getMasterVersionEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect18getCurrentUniqueIdEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect10masterIdleEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect9dB2stringEfPci (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect9Hz2stringEfPci (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect9ms2stringEfPci (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect12float2stringEfPci (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect10int2stringEiPci (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect17__hasVuDeprecatedEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect19__hasClipDeprecatedEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect19__canMonoDeprecatedEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect32__setRealtimeQualitiesDeprecatedEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect31__setOfflineQualitiesDeprecatedEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect28__isInputConnectedDeprecatedEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect29__isOutputConnectedDeprecatedEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX9beginEditEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX7endEditEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX9ioChangedEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX16updateSampleRateEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX15updateBlockSizeEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX15getInputLatencyEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX16getOutputLatencyEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX11getTimeInfoEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX22getCurrentProcessLevelEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX18getAutomationStateEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX19getHostVendorStringEPc (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX20getHostProductStringEPc (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX20getHostVendorVersionEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX18hostVendorSpecificEilPvf (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX9canHostDoEPc (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX15getHostLanguageEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX7isSynthEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX6noTailEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX12getDirectoryEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX13updateDisplayEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX10sizeWindowEii (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX16openFileSelectorEP13VstFileSelect (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX17closeFileSelectorEP13VstFileSelect (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX19allocateArrangementEPP21VstSpeakerArrangementi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX21deallocateArrangementEPP21VstSpeakerArrangement (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX11copySpeakerEP20VstSpeakerPropertiesS1_ (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX16matchArrangementEPP21VstSpeakerArrangementS1_ (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX11offlineReadEP14VstOfflineTask16VstOfflineOptionb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX12offlineWriteEP14VstOfflineTask16VstOfflineOption (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX12offlineStartEP12VstAudioFileii (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX21offlineGetCurrentPassEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX25offlineGetCurrentMetaPassEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX22__wantEventsDeprecatedEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX19__tempoAtDeprecatedEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX39__getNumAutomatableParametersDeprecatedEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX36__getParameterQuantizationDeprecatedEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX20__needIdleDeprecatedEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX27__getPreviousPlugDeprecatedEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX23__getNextPlugDeprecatedEi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX32__willProcessReplacingDeprecatedEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX30__wantAsyncOperationDeprecatedEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX29__hasExternalBufferDeprecatedEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX31__setOutputSamplerateDeprecatedEf (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX38__getInputSpeakerArrangementDeprecatedEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX39__getOutputSpeakerArrangementDeprecatedEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX22__openWindowDeprecatedEP21__VstWindowDeprecated (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX23__closeWindowDeprecatedEP21__VstWindowDeprecated (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX24__getChunkFileDeprecatedEPv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZTI12AudioEffectX (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN6VSTGUI8soHandleE (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZTV12AudioEffectX (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect9setEditorEP10AEffEditor (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectXC2EPFlP7AEffectiilPvfEii (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffectD2Ev (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect19canProcessReplacingEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX6resumeEv (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect17programsAreChunksEb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12SurgeStorage11load_wt_wavENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEP9Wavetable (target/vst2/Debug/Surge-Debug.so)
undefined symbol: __cpuid (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _Z19spawn_miniedit_textPci (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX7isSynthEb (target/vst2/Debug/Surge-Debug.so)

Did you include the pull request and applied the patch included in that
pull request?

On Thu, Oct 4, 2018 at 3:07 PM, davephillips notifications@github.com
wrote:

Hey Kjetil, Thanks for the assistance ! As I mentioned I can build the
VST2 without problems. I ran ldd as per your instructions, got the
following result, complete with a report of missing symbols. What stage did
I miss ?

[dlphilp@The6300 surge]$ ldd -r target/vst2/Debug/Surge-Debug.so
linux-vdso.so.1 (0x00007ffc1e5f7000)
libgtkmm-3.0.so.1 => /lib64/libgtkmm-3.0.so.1 (0x00007f4da463c000)
libatkmm-1.6.so.1 => /lib64/libatkmm-1.6.so.1 (0x00007f4da43ec000)
libgdkmm-3.0.so.1 => /lib64/libgdkmm-3.0.so.1 (0x00007f4da419c000)
libgiomm-2.4.so.1 => /lib64/libgiomm-2.4.so.1 (0x00007f4da3de4000)
libpangomm-1.4.so.1 => /lib64/libpangomm-1.4.so.1 (0x00007f4da3bb4000)
libglibmm-2.4.so.1 => /lib64/libglibmm-2.4.so.1 (0x00007f4da3934000)
libgtk-3.so.0 => /lib64/libgtk-3.so.0 (0x00007f4da3004000)
libgdk-3.so.0 => /lib64/libgdk-3.so.0 (0x00007f4da2d34000)
libpangocairo-1.0.so.0 => /lib64/libpangocairo-1.0.so.0
(0x00007f4da2b24000)
libpango-1.0.so.0 => /lib64/libpango-1.0.so.0 (0x00007f4da28d4000)
libatk-1.0.so.0 => /lib64/libatk-1.0.so.0 (0x00007f4da26ac000)
libcairo-gobject.so.2 => /lib64/libcairo-gobject.so.2 (0x00007f4da249c000)
libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007f4da211c000)
libcairomm-1.0.so.1 => /lib64/libcairomm-1.0.so.1 (0x00007f4da1ef4000)
libcairo.so.2 => /lib64/libcairo.so.2 (0x00007f4da1bc4000)
libsigc-2.0.so.0 => /lib64/libsigc-2.0.so.0 (0x00007f4da19bc000)
libgdk_pixbuf-2.0.so.0 => /lib64/libgdk_pixbuf-2.0.so.0
(0x00007f4da1794000)
libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f4da153c000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f4da11fc000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4da0fdc000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f4da0c54000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4da094c000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f4da0734000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4da036c000)
libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f4da0164000)
libX11.so.6 => /lib64/libX11.so.6 (0x00007f4d9fe24000)
libXi.so.6 => /lib64/libXi.so.6 (0x00007f4d9fc0c000)
libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007f4d9fa04000)
libatk-bridge-2.0.so.0 => /lib64/libatk-bridge-2.0.so.0
(0x00007f4d9f7d4000)
libepoxy.so.0 => /lib64/libepoxy.so.0 (0x00007f4d9f4d4000)
libpangoft2-1.0.so.0 => /lib64/libpangoft2-1.0.so.0 (0x00007f4d9f2bc000)
libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007f4d9f074000)
libXinerama.so.1 => /lib64/libXinerama.so.1 (0x00007f4d9ee6c000)
libXrandr.so.2 => /lib64/libXrandr.so.2 (0x00007f4d9ec5c000)
libXcursor.so.1 => /lib64/libXcursor.so.1 (0x00007f4d9ea4c000)
libXcomposite.so.1 => /lib64/libXcomposite.so.1 (0x00007f4d9e844000)
libXdamage.so.1 => /lib64/libXdamage.so.1 (0x00007f4d9e63c000)
libxkbcommon.so.0 => /lib64/libxkbcommon.so.0 (0x00007f4d9e3fc000)
libwayland-cursor.so.0 => /lib64/libwayland-cursor.so.0
(0x00007f4d9e1f4000)
libwayland-egl.so.1 => /lib64/libwayland-egl.so.1 (0x00007f4d9dfec000)
libwayland-client.so.0 => /lib64/libwayland-client.so.0
(0x00007f4d9dddc000)
libXext.so.6 => /lib64/libXext.so.6 (0x00007f4d9dbc4000)
librt.so.1 => /lib64/librt.so.1 (0x00007f4d9d9bc000)
libthai.so.0 => /lib64/libthai.so.0 (0x00007f4d9d7ac000)
libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f4d9d5a4000)
libharfbuzz.so.0 => /lib64/libharfbuzz.so.0 (0x00007f4d9d33c000)
libfreetype.so.6 => /usr/lib64/freetype-freeworld/libfreetype.so.6
(0x00007f4d9d08c000)
libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007f4d9cde4000)
libEGL.so.1 => /usr/lib64/nvidia-340xx/libEGL.so.1 (0x00007f4d9cad4000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4d9c8cc000)
libpng16.so.16 => /lib64/libpng16.so.16 (0x00007f4d9c694000)
libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007f4d9c48c000)
libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007f4d9c27c000)
libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f4d9c054000)
libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f4d9be44000)
libz.so.1 => /lib64/libz.so.1 (0x00007f4d9bc2c000)
libGL.so.1 => /usr/lib64/nvidia-340xx/libGL.so.1 (0x00007f4d9b8dc000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f4d9b6b4000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f4d9b494000)
libffi.so.6 => /lib64/libffi.so.6 (0x00007f4d9b28c000)
/lib64/ld-linux-x86-64.so.2 (0x0000559be5100000)
libatspi.so.0 => /lib64/libatspi.so.0 (0x00007f4d9b054000)
libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00007f4d9adfc000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f4d9abcc000)
libdatrie.so.1 => /lib64/libdatrie.so.1 (0x00007f4d9a9c4000)
libgraphite2.so.3 => /lib64/libgraphite2.so.3 (0x00007f4d9a794000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f4d9a584000)
libnvidia-glsi.so.340.98 => /usr/lib64/nvidia-340xx/libnvidia-glsi.so.340.98
(0x00007f4d9a2fc000)
libXau.so.6 => /lib64/libXau.so.6 (0x00007f4d9a0f4000)
libnvidia-tls.so.340.98 => /usr/lib64/nvidia-340xx/tls/libnvidia-tls.so.340.98
(0x00007f4d99eec000)
libnvidia-glcore.so.340.98 => /usr/lib64/nvidia-340xx/libnvidia-glcore.so.340.98
(0x00007f4d972d4000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f4d9705c000)
libsystemd.so.0 => /lib64/libsystemd.so.0 (0x00007f4d96fd4000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f4d96dac000)
libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007f4d96ac4000)
libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007f4d968ac000)
libdw.so.1 => /lib64/libdw.so.1 (0x00007f4d9665c000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f4d96454000)
libelf.so.1 => /lib64/libelf.so.1 (0x00007f4d9623c000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f4d96034000)
undefined symbol: _ZN12AudioEffectX10dispatcherEiilPvf
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect21setParameterAutomatedEif
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect19canProcessReplacingEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect18canDoubleReplacingEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect17programsAreChunksEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect15setInitialDelayEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect16getMasterVersionEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect18getCurrentUniqueIdEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect10masterIdleEv (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: _ZN11AudioEffect9dB2stringEfPci
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect9Hz2stringEfPci
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect9ms2stringEfPci
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect12float2stringEfPci
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect10int2stringEiPci
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect17__hasVuDeprecatedEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect19__hasClipDeprecatedEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect19__canMonoDeprecatedEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect32__setRealtimeQualitiesDeprecatedEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect31__setOfflineQualitiesDeprecatedEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect28__isInputConnectedDeprecatedEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect29__isOutputConnectedDeprecatedEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX9beginEditEi (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: _ZN12AudioEffectX7endEditEi (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: _ZN12AudioEffectX9ioChangedEv (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: _ZN12AudioEffectX16updateSampleRateEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX15updateBlockSizeEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX15getInputLatencyEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX16getOutputLatencyEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX11getTimeInfoEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX22getCurrentProcessLevelEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX18getAutomationStateEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX19getHostVendorStringEPc
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX20getHostProductStringEPc
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX20getHostVendorVersionEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX18hostVendorSpecificEilPvf
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX9canHostDoEPc (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: _ZN12AudioEffectX15getHostLanguageEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX7isSynthEb (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: _ZN12AudioEffectX6noTailEb (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: _ZN12AudioEffectX12getDirectoryEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX13updateDisplayEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX10sizeWindowEii
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX16openFileSelectorEP13VstFileSelect
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX17closeFileSelectorEP13VstFileSelect
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX19allocateArra
ngementEPP21VstSpeakerArrangementi (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX21deallocateAr
rangementEPP21VstSpeakerArrangement (target/vst2/Debug/Surge-Debug.so)
undefined symbol:
ZN12AudioEffectX11copySpeakerEP20VstSpeakerPropertiesS1
(target/vst2/Debug/Surge-Debug.so)
undefined symbol:
ZN12AudioEffectX16matchArrangementEPP21VstSpeakerArrangementS1
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX11offlineReadE
P14VstOfflineTask16VstOfflineOptionb (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX12offlineWrite
EP14VstOfflineTask16VstOfflineOption (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX12offlineStartEP12VstAudioFileii
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX21offlineGetCurrentPassEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX25offlineGetCurrentMetaPassEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX22__wantEventsDeprecatedEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX19__tempoAtDeprecatedEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX39__getNumAutomatableParametersDeprecatedEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX36__getParameterQuantizationDeprecatedEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX20__needIdleDeprecatedEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX27__getPreviousPlugDeprecatedEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX23__getNextPlugDeprecatedEi
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX32__willProcessReplacingDeprecatedEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX30__wantAsyncOperationDeprecatedEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX29__hasExternalBufferDeprecatedEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX31__setOutputSamplerateDeprecatedEf
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX38__getInputSpeakerArrangementDeprecatedEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX39__getOutputSpeakerArrangementDeprecatedEv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX22__openWindowDeprecatedEP21__VstWindowDeprecated
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX23__closeWindowDeprecatedEP21__VstWindowDeprecated
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX24__getChunkFileDeprecatedEPv
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZTI12AudioEffectX (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN6VSTGUI8soHandleE (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZTV12AudioEffectX (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect9setEditorEP10AEffEditor
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectXC2EPFlP7AEffectiilPvfEii
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffectD2Ev (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN11AudioEffect19canProcessReplacingEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12AudioEffectX6resumeEv (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: _ZN11AudioEffect17programsAreChunksEb
(target/vst2/Debug/Surge-Debug.so)
undefined symbol: _ZN12SurgeStorage11load_wt_wavENSt7__cxx1112basic_
stringIcSt11char_traitsIcESaIcEEEP9Wavetable (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: __cpuid (target/vst2/Debug/Surge-Debug.so)
undefined symbol: _Z19spawn_miniedit_textPci (target/vst2/Debug/Surge-
Debug.so)
undefined symbol: _ZN12AudioEffectX7isSynthEb (target/vst2/Debug/Surge-
Debug.so)


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/kurasu/surge/issues/19#issuecomment-427011461, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABF9p0WODXWuIwRDvIfiRH4XnFH2YcSOks5uhggbgaJpZM4W80Nw
.

So I tested building this after a few months and for the vst3 build I'm getting different errors, related to the GUI probably like for the macOS build.

This is the process I followed to make this build:

# Clone Premake5
git clone https://github.com/premake/premake-core.git
# Build it
cd premake-core
make -f Bootstrap.mak linux
# Exit
cd ..
git clone https://github.com/kurasu/surge.git
cd surge
# Clone submodules
git submodule update --init --recursive
# Copy premake5 binaries to the surge directory
cp ../premake-core/bin/release/premake5 .
# Build the makefile
./premake5 gmake2
# And the vst3
make

After executing ld on the Surge-Debug.vst3 which results from the process in /target/vst3/Debug I get this output:

Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::queryInterface(char const*, void**)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::setParamNormalized(unsigned int, double)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::createView(char const*)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::queryInterface(char const*, void**)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::queryInterface(char const*, void**)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::setParamNormalized(unsigned int, double)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::getState(Steinberg::IBStream*)'
Surge-Debug.vst3: undefined reference to `__cpuid'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::queryInterface(char const*, void**)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::getMidiControllerAssignment(int, short, short, unsigned int&)'
Surge-Debug.vst3: undefined reference to `SurgeStorage::load_wt_wav(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Wavetable*)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::setState(Steinberg::IBStream*)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::getParamValueByString(unsigned int, char16_t*, double&)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::queryInterface(char const*, void**)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::editorRemoved(Steinberg::Vst::EditorView*)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::setComponentState(Steinberg::IBStream*)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::getState(Steinberg::IBStream*)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::getMidiControllerAssignment(int, short, short, unsigned int&)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::setState(Steinberg::IBStream*)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::createView(char const*)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::getParamValueByString(unsigned int, char16_t*, double&)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::editorAttached(Steinberg::Vst::EditorView*)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::receiveText(char const*)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::queryInterface(char const*, void**)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::getParamStringByValue(unsigned int, double, char16_t*)'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::setComponentState(Steinberg::IBStream*)'
Surge-Debug.vst3: undefined reference to `Steinberg::SystemTime::getTicks64()'
Surge-Debug.vst3: undefined reference to `SurgeVst3EditController::queryInterface(char const*, void**)'
Surge-Debug.vst3: undefined reference to `non-virtual thunk to SurgeVst3EditController::getParamStringByValue(unsigned int, double, char16_t*)'
Surge-Debug.vst3: undefined reference to `spawn_miniedit_text(char*, int)'
Surge-Debug.vst3: undefined reference to `moduleHandle'

So I think I will start looking for the moduleHandle, Steinberg::* and spawn_miniedit_text. I don't have much experience with C++ but I will try my best :smiley:

@Jorgeelalto after cloning the repo, did you run this?

git submodule update --init --recursive

? let us know if you get a different set of errors then.

Oops, yes, forgot to add that to the process. I ran that before compiling everything yes (I will add it to my comment). Those errors are thrown even with the submodule cloning.

@Jorgeelalto what about trying to get VST2 to compile?

Maybe there is an option to specify on premake5 so that it creates a makefile for a vst2 version, but just running premake5 gmake or premake5 gmake2 generates a Makefile and a surge-vst3.make. Both build the vst3 version, did not found a way to build the vst2 yet.

Edit: checked previous replies to this issue, did the makefile generation changed? I can see we had vst2 makefiles some time ago. I'm using the latest master version.

Edit 2: Never mind, looks like we have to set the env variable VST2SDK_DIR.

So I managed to start building vst2 and I get a lot of errors of the type "CRect does not name a type", "CBitmap has not been declared". To me it looks like some kind of include problem, maybe the source code needs to be fed with some more .h files. I will try including some files manually.

@Jorgeelalto since today this repo progressed with about 100 new commits being merged into master - could you check again and see if you're still getting these errors?

For VST2 build the my commits were missing. I've created a new pull request (substitute for #70).

I see, I will wait for that PR to be merged. I have tested with the latest version of the master branch but I get the same problems in both VST3 and VST2.

PR is #111

@jorgeelalto the PR is in, let us know how you fare with Linux builds now :)

@Jorgeelalto it's probably a great idea to look at https://github.com/whydoubt/surge/tree/linux_storage (heads up @jsakkine) - this might eventually make it into a PR, maybe there's something useful coming in there? :)

Just as an update, I took my ubuntu vm, pulled head, and built surge-app (not surge-vst3) and it linked no problem. I just needed to

apt-get install libgtkmm-3.0-dev

first.

surge-vst3 links for me also. No idea if it works. But at least on my vm (16.04.10 ubuntu with g++ 5.4.0) seems the recent spate of PRs have things linking. Just an FYI.

@baconpaul what's surge-app ? vst2, or standalone? surely we're not in the status where a surge linux standalone exists, or WDYT @jsakkine ?

Its @jsaskkine's work which got merged into the main branch. It doesn't work. But it does link!

okay. looks like we could wait till @whydoubt pushes in his PR for this branch of his that's wip:
https://github.com/whydoubt/surge/tree/linux_storage

anyway, nice to see that the linux work is being progressed by both @whydoubt and @jsakkine

Greetings !

I can build the VST2 and VST3 plugin for Linux but neither will load in Bitwig, I always get the "Could not read plugin metadata" error. I also a ran a small VST2 debug program (from the VeeSeeVSTRack project) on the Surge binaries, the error reported "Could not find mainProc". Any suggestions ? Btw, I've been following this issue and building the code regularly. Unfortunately life events have prevented further involvement until now, hopefully I can help a bit towards getting a working Linux version of Surge.

Linux Fedora 23
GCC 5.3.1

Best,

dp

Sorry I'll be for a while bit passive because my paid work on kernel takes all my time :) I'll become active when the holidays start. @whydoubt: sorry to interrupt ongoing work but it'd be nice if you could take the model that I proposed in https://github.com/kurasu/surge/issues/112 for Linux specific changes.

@davephillips can you try and check the VSTs with http://github.com/tracktion/pluginval and let us know what the app says?

@baconpaul: yeah it is essentially an explicit check that you have all the required VST2 files.

@esaruoho No problem, I'm building it now. I'll report back asap.

thanks @davephillips !

@esaruoho Pluginval reports that the files appear to be plugins but that they fail to load. And that's all it reports. :(

Meta-question: what is the good practice in premake to do depedency checks i.e. get missing gtkmm reported when it is missing when you issue the premake command? I'm thinking something similar as autotools does.

Related to standalone. Would be nice to be able to list the dependencies and make premake complain if something is missing.

Yeah @jsakkine we looked at that a little and it seems premake is just lua code but lua doesn't make it super easy to do some of those things. For mac after @esaruoho tried a few things we just put a check into build-osx.sh which is unsatisfying.

I've never used premake and barely used lua; and googling doesn't help much.

I agree it would be nice if there was a clean check of prerequisites (like Xcode version and OS version and git submodules on mac; appropriate packages on linux; and whatever you do on windows) somewhere which ran when a user checked out and tried to build.

Yeah. I guess the comparable thing to autotools macros would be to create modules for each dependency, which would be an enormous job to do. That is how you use Qt for example with premake.

Yeah, I've used mainly kbuild and seldomly autotools :) It would be worth of considering to change to something mature like CMake even if it would be only because of decent dependency management. Now this infrastructure is terrible for things like packaging.

The key benefit of both autotools (can be discarded because is pain to use with Windows) and CMake is the maturity. Everything integrates to them with almost zero effort. Spent few hours today browsing about premake dep management in order to find out that it does not exist.

@bluszcz - when I read how you started this issue, I immediately though about a video I've posted recently: https://www.youtube.com/watch?v=KYeTg4_k1Q0

Anyway - I'd love to try Surge once I can run it on Linux, and I could also make a video about it later.

I'm into all things related to open-source and audio, but I especially love synthesizers.

@unfa I've watched some of your YT videos in the past. I think you mentioned once about avoiding VST plugins. Am I remembering correctly, and is this still the case? While I am currently working towards getting Surge on Linux as VST2 or VST3, longer-term I would like to get it working as a LADSPA or LV2 plugin. I would enjoy hearing your thoughts.

I try to use LV2 plug-ins wherever possible, as LV2 is a truely open standard, while VST is a proprietary technology (and Steinberg has recently decided to murder VST2 in order to replace it with VST3 - which seems to be completely independent format, despite the name).

When I can't get something to work as LV2 (like Oxe FM Synth) but it's still open-source and a Linux-native VST I'll go with it. I never tried running Windows VSTs in Linux.

So I would be glad to try Surge in VST format, but I'd be delighted to see it available in the LV2 format :)

Asked this some other issue too but the heck are vst2wrapper.cpp and vst2wrapper.sdk.cpp in vst3sdk?

And what is the definition of done for this issue?

@jsakkine i would venture to guess that getting a VST2 and VST3 to compile and build successfully and to run on hosts == Ticket can be closed

Oh and updating README.md w instructions on how to do it. Maybe even a screenshot of Surge running on a Linux host. WDYT?

Sounds fair enough.

I would lower that a bit by saying that at least one target (VST2 or VST3) up and running and then open a separate tickets for the rest. Right now this kind of umbrella ticket makes sense because we don't know yet which horse is gonna win the race...

@esaruoho, probably noticed that I went through all the open issues :D Started working on my CMake ticket and wanted to get an overview WTF (or WTH these days) is going on :)

I definitely used issues for Mac that way. One for “get it to build” one for “get it to load in logic” one for “get it to load in logic with the ui” then one for “fix the packaging nd so on” roughly. I’d encourage same here. So close this ticket when any flavor of any Linux host shows the ui and makes a beep then make new tickets for what comes next.

I had some time this morning to work on debugging Linux Surge. This report comes from the VeeSeeVSTRack vst2-debug-host utility:

$ ./vst2_debug_host 
Failed to load library /home/dlphilp/src/surge/target/vst2/Debug/Surge-Debug.so: /home/dlphilp/src/surge/target/vst2/Debug/Surge-Debug.so: undefined symbol: _ZN6VSTGUI5CView12beforeDeleteEv
debug_host: exiting

I also ran it on the VST3 binary:

$ ./vst2_debug_host 
Failed to load library /home/dlphilp/src/surge/target/vst3/Debug/Surge-Debug.so: /home/dlphilp/src/surge/target/vst3/Debug/Surge-Debug.so: undefined symbol: _ZN9Steinberg10SystemTime10getTicks64

So one or more object files aren't being linked ?

The VST3 one is actually a bug in the steinberg API. See the discussion in #130

I don't know if @whydoubt has a solution but maybe we could do something like storing a vst3dk.patch in scripts/linux and applying it after we do the git submodule until the underlying lib is fixed? Unless I misunderstood the @whydoubt comment and post to steinberg issue tracker.

@baconpaul As much as I dislike the idea of that patch, it's probably our best bet. I'll look into it. It's going to end up with a lot more than just the getTicks64 fix.

Wouldn't more clean way be to fork Steinbergs repo and use that as the submodule instead of official? Then you don't need to trash our repo with random patch files. Whenwe don't need it anyomore, we can just revert the submodule location back to the official.

@jsakkine I kinda like using the official repo for Mac and windows but I would be fine to have a vst3-patch-linux Submodule also and then use that in Linux sure. We probably want to move Submodules to a directory (like “deps”) soon too since we may add a few with the open tickets we have here.

Any license issues with a fork vs patch?

@jsakkine FWIW, we'd have to do that recursively. First, forking and changing vst3_base. Second, forking and changing vst3sdk to point to the forked vst3_base. Third, change Surge to point to the forked vst3sdk.

Also, vst3_base isn't the only sub-submodule that will need to be changed.

edited: OK, or create a submodule with just the patches, as @baconpaul mentioned. Each option brings its own headaches.

Yeah clearly the best solution is that the library not be broken!

I think “whoever does the work decides which course is easiest” is the answer we will get. I would probably do a patch file in scripts/linux. But I’m not doing it so see the prior answer :)

I see. So it would be seven submodules in total if I counted right? Still think it would be the best especially if this won't end here. But yeah, not enforcing this direction...

I mean if we need to fix something lets say two months from now we would have a repository to land the fixes. And you wouldn't need rebase those forks too often, especially not the non-gui part, which is coarsely just a gateway to the Surge code.

Would be good to have own Github organization for Surge where we could place whatever related repositories we want. I wonder what @kurasu would think of that. If we had that, things would be cleanly organized in this and similar situations. In general, it'd be good to have a place for Surge specific forks of any dependencies.

ftr; I got it to build cleanly
vst2, vst3 and standalone
debug and release
however I got no UI. Just a black window
I do have sound

Thanks! Any changes to make it build? Which host did you use to hear sound and see the black window?

Oh and one thought: an all black window correctly sized could have a lot of causes but one such cause would be that the component cant load the bitmaps. Just a thought if you want to debug! Could easily be wrong tho

@rghvdberg if you can push a PR that makes it build cleanly AND display a black window, then someone else could take that further. would be awesome!

I haven't had time to work on Surge the last few days and may not get much time for several more. I would like to pass on some of what I _have_ found, in hopes that it will inform others' investigations...

  • The VST3 SDK plugin samples (that have GUIs) all extend VST3Editor (SurgeGUIEditor extends VSTGUIEditor)
  • VST3Editor on Linux has an implementation of X11::IRunLoop for event processing. Copying that implementation into SurgeGUIEditor and hooking it up allowed me to see a few items in the GUI.
  • I had to update to the latest VST SDK to get some things working, but something about how the new SDK and Surge interact is causing additional issues with locating the bitmaps.
  • I think extending VST3Editor instead of VSTGUIEditor could help getting VST3 going (I believe it would take care of the runloop and bitmap locating issues), but it does not appear to be a trivial task.

I didn't change any file.
I had an old vstsdk and copied /pluginterfaces/vst2.x and /public.sdk/source/vst2.x to surge/vst3sdk/
In the terminal I did export VST2SDK_DIR=/home/rob/git/surge/vst3sdk/
ran premake5 gmake2
and that was it

  • ldd doesn't show any missing libs
  • standalone app immediately closes
  • vst2 runs in Carla but only shows a black window, I can however hook up the audio out and get sound from it
  • vst2 crashes Ardour
  • vst3 doesn't appear in Reaper (the only vst3 host in Linux I was able to test)

Thank you. Very useful.

with carla you can run the vst2 from the terminal
All I get (besides the empty windows) is

carla-single vst2 ./Surge-Debug.so 
['/usr/lib/carla/carla-bridge-native', 'vst2', './Surge-Debug.so', '(none)', '0']
libjack.so.0 loaded sucessfully!
Previous plugin state in '/home/rob/git/surge/target/vst2/Debug/Surge.carxs' is non-existent, will start from default state

When closing the gui

I think all of those messages are carla messages.
Bridge: ScopedPluginAction(0) - blocking START
Bridge: ScopedPluginAction(0) - blocking DONE

oh, one more thing
At first I got this

SurgeStorage: Unable to load Surge configuration file "/home/rob/.local/share/Surge/configuration.xml".

but I copied those files (dirs) to the correct location and now that message is gone

Don't listen to @rghvdberg . he's a jerk.

ftr; I got it to build cleanly
vst2, vst3 and standalone
debug and release
however I got no UI. Just a black window
I do have sound

I don't know if my tests are useful to anyone since they don't link directly to surge ,but building the sdk examples provided by steinberg and then testing them with steinberg's edithost can open the GUI. However, if i update to the latest vstgui and build them again the GUI windows are black.

image

@GeorgeNs erhm, this is linux? AFAIK all the other users have a UI...

@kzantow yeah guis showing up black on Linux reported earlier too - which is progress! Seems it may not be surge from the above report

@kzantow yes linux, just ubuntu 18 with many extra tweaks and builds targeting audio processing and music making.

@baconpaul thanks for confirming,it seems it'snot only me having this issue. In my case keeping an older vstgui version solved my problem.
Cheers

@georgens do you happen to know how far back you had to rev vstgui to get it to work? May help some of the above folks

@baconpaul
This version should be the one that builds the steinberg plugins examples on linux succesfully:
https://github.com/steinbergmedia/vstgui/releases/tag/vstgui4_6

I tried it a long time ago,so if anyone can confirm that it is really so it would be nice.
Cheers

I've built it with the version mentioned by @GeorgeNs .
Same results.

trying to build examples from vstgui
could be doing this totally wrong but :
cloned the vstgui repo
mkdir build , cd build
cmake ../
make
result , everything segfaults ... (╯°□°)╯︵ ┻━┻

the vstgui4_6 , test fails ..

    title [OK] -> 108 µs
    font [OK] -> 93 µs
    fontColor [OK] -> 97 µs
    boxFrameColor [OK] -> 93 µs
    boxFillColor [OK] -> 92 µs
    checkmarkColor [OK] -> 91 µs
    drawCrossbox [OK] -> 101 µs
Segmentation fault
tests/unittest/CMakeFiles/unittests.dir/build.make:1033: recept voor doel 'Debug/unittests' is mislukt

and I dunno how to build the examples in 4_6 , it only builds the libs
probably needs some arguments for make :man_shrugging:
should I report this back to steinberg ?

FWIW, the code for the sample plugins and hosts is in the vst3_public_sdk repo. To build and test, you'll really need the whole vst3sdk (recusively cloned). When you build, links for each of the sample plugins are made in your ~/.vst3 folder. The sample hosts are put in the bin/Debug folder within the build folder.

@kzantow reported for spam

yes you need vst3sdk recursively cloned. What is inside in vstgui however is another story.
some weeks ago inside that folder was actually the 4_6 version. You will have to delete that folder and reclone only the vstgui to get finally the latest update. I dunno if something changed recently,didn't have time to check...

@GeorgeNs You shouldn't need to delete and reclone. Just go into vstgui4, checkout either the master or the develop branch (origin/HEAD points at the develop branch, FWIW). And if it's not a fresh clone, do a pull.

Yes re-update I wanted to say..anyway,the matter is that if I get the latest vstgui and build the examples I will have black window,if I don't use the fresh and keep the 4_6 version the GUI of the examples shows up as expected

Where is this going? Tried to Load VST2 plug-in on Linux with htop on. It eats all the system memory and crashes. I wonder what causes that memory leak.

Created #250. Working on a fix for that one.

@jsakkine can there be some sort of most minimal check of disabling everything possible and seeing if it still Eats up all the resources?

@esaruoho, does not make sense to even think about that as long as there are null pointer dereferences and all kinds of crust in the way... I'll fix bugs one by one as I stump into them and then we see what is happening...

@jsakkine if it helps here was basically my path to getting mac au working (which seems forever ago but was only about 30 days ago).

  1. Get it to build and link. We are there on linux. Great.
  2. The configuration state is key and the code will NPE without it. But the error messages are bad. So SurgeStorage.cpp where there's the error box around configuration.xml may be your second place. Without that you can't even load the SurgeSynth object let alone the GUI
  3. The patch management is next, but if you solved 2 you probably got that

With that you can get an instance of SurgeSynthesizer.cpp up and running and making sound. (That may be a reasonable thing to put in standalone app!). Then you have to turn to the UI

  1. The window creation path is different in each of VST2 3 and AU. In VST2 it is all in src/vst2 and is pretty clear but make sure it is calling the APIs you want and isn't #ifdef out for linux
  2. The window creation path will load bitmaps using CBitmap( CResourceDescription( id ) ) which on windows uses the .rc file and on mac loads from the bundle; you will need to look in vstgui source to see what it does on mac then make that work

With those two things fixed you stand a chance of actually getting a UI on screen I think.

Hope that helps!

Thanks @baconpaul. I have pretty good idea how I'm proceeding. Not exactly with such a high level plan but I just go forward one car crash at a time :) I will create a CControl for showing the error message on Linux. That is the only stable platform to do it.

I'll catch the exception in the plug-in level and spawn that control there.

And I solely focus on VST2 on Linux right now, ignoring everything else.

Hey so after the weekend, linux builds and runs. Has bugs still but builds and runs. So I’m going to close this issue! The README has good instructions on how to build it if you’re finding out that it builds and runs for the first time through a github notification!

Hey,that's really hard work,it works!
Just may i add some notes for linux compilation instructions?
in order to build the vst2 something like this is needed:
export VST2SDK_DIR={...where the sdk2 is....}
then removing --:
./build-linux.sh clean
./build-linux.sh build
and finally copying the contents of data into Documents/Surge/
can have also the presets available.
Thanks!

Hey,that's really hard work,it works!
Just may i add some notes for linux compilation instructions?
in order to build the vst2 something like this is needed:
export VST2SDK_DIR={...where the sdk2 is....}
then removing --:
./build-linux.sh clean
./build-linux.sh build
and finally copying the contents of data into Documents/Surge/
can have also the presets available.
Thanks!

.. hmm. the export VST2SDK_DIR has been added into the readme.md as of yesterday.. the -- removal has also been done, yesterday. are you sure you're viewing the newest readme.md?

Really???yes pretty sure,I am on master branch

Oh.for some reasonq Firefox engine results not the updated master branch. It's okay now!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

esaruoho picture esaruoho  ·  10Comments

mxmilkiib picture mxmilkiib  ·  7Comments

itsmedavep picture itsmedavep  ·  9Comments

sense-amr picture sense-amr  ·  10Comments

baconpaul picture baconpaul  ·  7Comments