Help with using DaisySP library

Hi there.

Hoping some of the more C++ savvy folks here can help. I’m trying to use VCV Rack to create and test some bass guitar effects that, if they work, I can then add to the library and also run on a Daisy Seed. I went through the Plugin Development Tutorial and figure out adding some custom code to the process. That was reasonably straight forward.

Now I want to use some functions from the DaisySP library in this module but I can’t figure out how to correctly add the library for it to work with VCV Rack.

It’s worth stating upfront that I am NOT a C++ developer. I know Python and Javascript far better but I was able to figure out how to add some custom code, a very basic sub octave generator, to the module and it worked.

When I try to add the DaisySP library, I can get it to compile with make and then added to the local library with make install but it doesn’t load and I see the following in the log.txt file.

FYI - this is running on an M1 Mac - VCV Rack Free 2.4.1 macOS ARM64

[0.252 warn src/plugin.cpp:196 loadPlugin] 
Could not load plugin /Users/jeff/Documents/Rack2/plugins-mac-arm64/MyPlugin:
Failed to load library /Users/jeff/Documents/Rack2/plugins-mac-arm64/MyPlugin/plugin.dylib: dlopen(/Users/jeff/Documents/Rack2/plugins-mac-arm64/MyPlugin/plugin.dylib, 0x0006): 
symbol not found in flat namespace '__ZN7daisysp9Overdrive4InitEv'

And that is unfortunately not meaningful to me as I don’t know enough about C++ build environments to even know where to start. Google/CoPilot etc weren’t particularly helpful either. I have tried moving things around, renaming etc. but I’m just guessing.

My code is here: GitHub - fletchjeff/MyPlugin

I have added the DaisySP source into the src directory, added this to the Makefile

DAISYSP_DIR = src/daisy

# FLAGS will be passed to both the C and C++ compiler
FLAGS +=
CFLAGS += $(DAISYSP_DIR)

and tried to use the library in MyModule_2.cpp but including the headers

#include "daisy/daisysp.h"
#include "daisy/Effects/overdrive.h"

and then initialising it and using in the code:

struct MyModule_2 : Module {
	enum ParamId {
        ...
	};

	daisysp::Overdrive od;

	MyModule_2() {
		config(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN);
                ...
		od.Init();
	}

	void process(const ProcessArgs& args) override {
		float out = 0.f;
		float in = inputs[AUDIO_IN_INPUT].getVoltage();
		
                od.SetDrive(params[OVERDRIVE_AMOUNT_PARAM].getValue());

		out = od.Process(in);
		outputs[AUDIO_OUT_OUTPUT].setVoltage(out);
	}

This should be similar to Eurorack Blocks but that is many layers of extra complexity for me to understand as I’m not making that exact hardware version.

Any help or guidance here would be greatly appreciated.

Looks like you aren’t linking the daisy obj/lib file.

Hey @pachde, thanks for the reply. Any pointers on how would I fix/do that? I’m very far out of my comfort zone here, so any specific instructions would be super appreciated.