rncbc / qtractor

Qtractor - An Audio/MIDI multi-track sequencer
https://qtractor.org
GNU General Public License v2.0
509 stars 88 forks source link

0.9.21 has missing symbols: qtractorLv2PluginType::createType, etc. #300

Closed yurivict closed 3 years ago

yurivict commented 3 years ago
ld: error: undefined symbol: qtractorLv2PluginType::lv2_plugins()
>>> referenced by qtractorPluginFactory.cpp
>>>               src/CMakeFiles/qtractor.dir/qtractorPluginFactory.cpp.o:(qtractorPluginFactory::scan())

ld: error: undefined symbol: qtractorLv2PluginType::createType(QString const&)
>>> referenced by qtractorPluginFactory.cpp
>>>               src/CMakeFiles/qtractor.dir/qtractorPluginFactory.cpp.o:(qtractorPluginFactory::addTypes(qtractorPluginType::Hint, QString const&))
>>> referenced by qtractorPluginFactory.cpp
>>>               src/CMakeFiles/qtractor.dir/qtractorPluginFactory.cpp.o:(qtractorPluginFactory::createPlugin(qtractorPluginList*, QString const&, unsigned long, qtractorPluginType::Hint))
>>> referenced by qtractorPluginFactory.cpp
>>>               src/CMakeFiles/qtractor.dir/qtractorPluginFactory.cpp.o:(qtractorPluginFactory::Scanner::addTypes(qtractorPluginType::Hint, QString const&))

ld: error: undefined symbol: qtractorLv2Plugin::qtractorLv2Plugin(qtractorPluginList*, qtractorLv2PluginType*)
>>> referenced by qtractorPluginFactory.cpp
>>>               src/CMakeFiles/qtractor.dir/qtractorPluginFactory.cpp.o:(qtractorPluginFactory::createPlugin(qtractorPluginList*, QString const&, unsigned long, qtractorPluginType::Hint))

ld: error: undefined symbol: qtractorLv2PluginType::lv2_open()
>>> referenced by qtractorMainForm.cpp
>>>               src/CMakeFiles/qtractor.dir/qtractorMainForm.cpp.o:(qtractorMainForm::loadSessionFileEx(QString const&, int, bool))
>>> referenced by qtractorMainForm.cpp
>>>               src/CMakeFiles/qtractor.dir/qtractorMainForm.cpp.o:(qtractorMainForm::loadSessionFileEx(QString const&, int, bool))
>>> referenced by qtractorMainForm.cpp
>>>               src/CMakeFiles/qtractor.dir/qtractorMainForm.cpp.o:(qtractorMainForm::newSession())
>>> referenced by qtractorMainForm.cpp
>>>               src/CMakeFiles/qtractor.dir/qtractorMainForm.cpp.o:(qtractorMainForm::openNsmSession())

grepping through code doesn't find definitions of these functions.

Used cmake-3.19.6 to configure.

rncbc commented 3 years ago

seems that LV2 (or libLILV) support is not available there... show the src/config.h file output from cmake please?

yurivict commented 3 years ago

https://people.freebsd.org/~yuri/qtractor-config.h

rncbc commented 3 years ago

this seems specific to your freebsd build: is that right? can you retry from the current or latest git HEAD tree?

OTOH. does openbsd have support for all the ALSA-MIDI that is mandatory to build and run qtractor?

yurivict commented 3 years ago

GitHub's master fails the same way.

Where is this function defined? There is only a declaration and several invocations and no definition:

$ grep -r "createType(" work/
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorDssiPlugin.h:    static qtractorDssiPluginType *createType(
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorLadspaPlugin.h:  static qtractorLadspaPluginType *createType(
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorLv2Plugin.h: static qtractorLv2PluginType *createType(const QString& sUri);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:           = qtractorLv2PluginType::createType(sFilename);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:           = qtractorDssiPluginType::createType(pFile, iIndex);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:           = qtractorLadspaPluginType::createType(pFile, iIndex);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:           = qtractorVstPluginType::createType(pFile, iIndex);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:           = qtractorVst3PluginType::createType(pFile, iIndex);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:           = qtractorLv2PluginType::createType(sFilename);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:       pType = qtractorLadspaPluginType::createType(pFile, iIndex);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:       pType = qtractorDssiPluginType::createType(pFile, iIndex);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:       pType = qtractorVstPluginType::createType(pFile, iIndex);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:       pType = qtractorVst3PluginType::createType(pFile, iIndex);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:           = qtractorLv2PluginType::createType(sFilename);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.cpp:       qtractorPluginType *pType = qtractorDummyPluginType::createType(sText);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorPluginFactory.h: static qtractorDummyPluginType *createType(const QString& sText);
work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorVstPlugin.h: static qtractorVstPluginType *createType(
rncbc commented 3 years ago

Where is this function defined? There is only a declaration and several invocations and no definition:

for example:

work/qtractor-qtractor_0_9_21-20-g1774248b/src/qtractorLv2Plugin.h: static qtractorLv2PluginType *createType(const QString& sUri);

it's here: https://github.com/rncbc/qtractor/blob/1774248b7c047aa43cc80a0d483be13db6c145c6/src/qtractorLv2Plugin.cpp#L1610

yurivict commented 3 years ago

The problem is this #ifdef CONFIG_LV2_STATE: https://github.com/rncbc/qtractor/blob/1774248b7c047aa43cc80a0d483be13db6c145c6/src/qtractorLv2Plugin.cpp#L115

It doesn't build when LV2 plugins are enabled but CONFIG_LV2_STATE=OFF.

CONFIG_LV2_STATE gets turned off somewhere in cmake scripts.

yurivict commented 3 years ago

libsuil is installed, yet it doesn't say that it failed to find it and then says: LV2 plug-in UI support (libsuil): no:

-- The C compiler identification is Clang 10.0.1
-- The CXX compiler identification is Clang 10.0.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
fatal: not a git repository (or any of the parent directories): .git
-- Looking for lroundf
-- Looking for lroundf - found
-- Looking for 3 include files fcntl.h, ..., signal.h
-- Looking for 3 include files fcntl.h, ..., signal.h - found
-- Looking for ladspa.h
-- Looking for ladspa.h - not found
-- Looking for dssi.h
-- Looking for dssi.h - not found
-- Looking for aeffectx.h
-- Looking for aeffectx.h - not found
-- Looking for vestige.h
-- Looking for vestige.h - found
-- Found PkgConfig: pkgconf (found version "1.7.4") 
-- Checking for module 'jack>=0.100.0'
--   Found jack, version 0.125.0rc1
-- Looking for jack_set_port_rename_callback
-- Looking for jack_set_port_rename_callback - not found
-- Checking for module 'alsa'
--   Found alsa, version 1.1.2
-- Checking for module 'sndfile'
--   Found sndfile, version 1.0.31
-- Checking for module 'vorbis'
--   Found vorbis, version 1.3.7
-- Checking for module 'vorbisenc'
--   Found vorbisenc, version 1.3.7
-- Checking for module 'vorbisfile'
--   Found vorbisfile, version 1.3.7
-- Checking for module 'ogg'
--   Found ogg, version 1.3.4
-- Checking for module 'mad'
--   Found mad, version 0.15.1b
-- Checking for module 'samplerate'
--   Found samplerate, version 0.2.1
-- Checking for module 'rubberband'
--   Found rubberband, version 1.8.2
-- Checking for module 'aubio>=0.4.1'
--   Package 'aubio', required by 'virtual:world', not found
CMake Warning at CMakeLists.txt:452 (message):
  *** AUBIO library not found.

-- Checking for module 'liblo'
--   Found liblo, version 0.31
-- Checking for module 'zlib'
--   Found zlib, version 1.2.11
-- Checking for module 'vst3sdk>=3.6.14'
--   Package 'vst3sdk', required by 'virtual:world', not found
CMake Warning at CMakeLists.txt:498 (message):
  *** VST3 SDK not found.

-- Checking for module 'lv2'
--   Found lv2, version 1.18.2
-- Looking for lv2/lv2plug.in/ns/extensions/ui/ui.h
-- Looking for lv2/lv2plug.in/ns/extensions/ui/ui.h - not found
-- Checking for module 'lilv-0'
--   Found lilv-0, version 0.24.12
-- Looking for lilv_file_uri_parse
-- Looking for lilv_file_uri_parse - not found
-- Looking for lilv_world_unload_resource
-- Looking for lilv_world_unload_resource - not found
-- Looking for lv2/lv2plug.in/ns/ext/atom/atom.h
-- Looking for lv2/lv2plug.in/ns/ext/atom/atom.h - not found
-- Looking for lv2/lv2plug.in/ns/ext/worker/worker.h
-- Looking for lv2/lv2plug.in/ns/ext/worker/worker.h - not found
-- Looking for lv2_programs.h
-- Looking for lv2_programs.h - not found
-- Looking for lv2_midnam.h
-- Looking for lv2_midnam.h - not found
-- Looking for lv2/lv2plug.in/ns/ext/time/time.h
-- Looking for lv2/lv2plug.in/ns/ext/time/time.h - not found
-- Looking for lv2/lv2plug.in/ns/ext/parameters/parameters.h
-- Looking for lv2/lv2plug.in/ns/ext/parameters/parameters.h - not found

  Qtractor 0.9.22 (Qt 5.15.2)

  Build target . . . . . . . . . . . . . . . . . . .: Release

  JACK Audio Connection Kit support  . . . . . . . .: yes
  ALSA MIDI Sequencer support  . . . . . . . . . . .: yes
  General audio file support (libsndfile)  . . . . .: yes
  Ogg Vorbis audio file support (libvorbis)  . . . .: yes
  MPEG-1 Audio Layer 3 file support (libmad) . . . .: yes
  Sample-rate conversion support (libsamplerate) . .: yes
  Pitch-shifting support (librubberband) . . . . . .: yes
  Beat-detection support (libaubio)  . . . . . . . .: no
  OSC service support (liblo)  . . . . . . . . . . .: yes
  Archive/Zip file support (zlib)  . . . . . . . . .: yes
  IEEE 32bit float optimizations . . . . . . . . . .: yes
  SSE optimization support (x86) . . . . . . . . . .: yes
  LADSPA plug-in support . . . . . . . . . . . . . .: no
  DSSI plug-in support . . . . . . . . . . . . . . .: no
  VST plug-in support  . . . . . . . . . . . . . . .: yes
  VST3 plug-in support . . . . . . . . . . . . . . .: no
  LV2 plug-in support  . . . . . . . . . . . . . . .: yes
  LV2 plug-in support (liblilv)  . . . . . . . . . .: yes
  LV2 plug-in UI support . . . . . . . . . . . . . .: no
  LV2 plug-in UI support (libsuil) . . . . . . . . .: no
rncbc commented 3 years ago

-- Checking for module 'lv2' -- Found lv2, version 1.18.2 -- Looking for lv2/lv2plug.in/ns/extensions/ui/ui.h -- Looking for lv2/lv2plug.in/ns/extensions/ui/ui.h - not found

this is very strange; how come lv2 is found and ui.h is not? something is really fishy in freebsd land.

what happens when you take the yet still official autotools/configure route?

yurivict commented 3 years ago

What package installs lv2/lv2plug.in/ns/extensions/ui/ui.h for you ?

rncbc commented 3 years ago

What package installs lv2/lv2plug.in/ns/extensions/ui/ui.h for you ?

lv2-dev(el)

yurivict commented 3 years ago

The file /usr/local/include/lv2/lv2plug.in/ns/extensions/ui/ui.h is present.

You fail to find it for some reason.

yurivict commented 3 years ago

The cmake script is very complex, it turns options on/off based on some complex logic.

You should have a single option to support LV2 - ON or OFF. IMO there is no need to support situations when LV2 is installed, but lilv or suil isn't. LV2 should imply all involved packages, and fail when any of them aren't present.

rncbc commented 3 years ago

let me remember you that the said complex logic has been in place for quite some time on GNU/Linux ever since the LV2 inception (back in 2008) and progressive development..

please be kind and investigate why the /usr/local/include/lv2/lv2plug.in/ns/extensions/ui/ui.h(and others like it) can't be found on you system; it can't be that/usr/local/includeis not on the default include search paths? can you check the output topkg-config --cflags lv2` ?

yurivict commented 3 years ago

On BSDs all packages are installed into /usr/local and include and lib directories there are not included in paths by default. Now when I included them into CXXFLAGS and LDFLAGS qtractor builds.

Something is broken with the LV2 detection when only some LV2 packages are detected.

I will look now if there are any runtime issues. I will report them separately if I find anything.

Thank you for your help!