It says ‘redefinition of default argument’, but it points to the same line as the original definition. I am building on a raspberry pi 5 using clang. Any ideas would be appreciated. Thank you.
/home/garbagelarge/Documents/PBEQpampleJuce/JUCE/modules/juce_events/native/juce_EventLoop_linux.h:51:84: error: redefinition of default argument
void registerFdCallback (int fd, std::function<void (int)> readCallback, short eventMask = 1 /*POLLIN*/);
^ ~
/home/garbagelarge/Documents/PBEQpampleJuce/JUCE/modules/juce_events/native/juce_EventLoop_linux.h:51:84: note: previous definition is here
void registerFdCallback (int fd, std::function<void (int)> readCallback, short eventMask = 1 /*POLLIN*/);
Forgot to mention that project builds successfully on Mac and windows.
I’m using CLion on raspian. I tried another compiler and the language describing the error was different but it was at the same spot and seemed to be describing the same issue.
Let me know if I can provide any other info.
Juce version is JUCE 8 develop branch.
CMakeLists.txt is a very slightly modified version of the Pamplejuce template:
# 3.24.1 is bundled in Visual Studio 2022 v17.4
# 3.24.1 is also bundled in CLion as of 2023
cmake_minimum_required(VERSION 3.24.1)
# This tells cmake we have goodies in the /cmake folder
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include (PamplejuceVersion)
# Configures universal binaries and decides which version of macOS to support
include(PamplejuceMacOS)
# Couple tweaks that IMO should be JUCE defaults
include(JUCEDefaults)
# Change me!
# This is the internal name of the project and the name of JUCE's shared code target
# Note: This cannot have spaces (it may be 2024, but you can't have it all!)
# Worry not, JUCE's PRODUCT_NAME can have spaces (and is what DAWs display)
set(PROJECT_NAME "playBackEQ")
# Worry not, JUCE's PRODUCT_NAME can have spaces (and is what DAWs will display)
# You can also just have it be the same thing as PROJECT_NAME
# You may want to append the major version on the end of this (and PROJECT_NAME) ala:
# set(PROJECT_NAME "MyPlugin_v${MAJOR_VERSION}")
# Doing so enables major versions to show up in IDEs and DAWs as separate plugins
# allowing you to change parameters and behavior without breaking existing user projects
set(PRODUCT_NAME "playBackEQ")
# Change me! Used for the MacOS bundle name and Installers
set(COMPANY_NAME "obscureSignals")
# Change me! Used for the MacOS bundle identifier (and signing)
set(BUNDLE_ID "com.obscureSignals.playBackEQ")
# Change me! Set the plugin formats you want built
# Valid choices: AAX Unity VST VST3 AU AUv3 Standalone
set(FORMATS Standalone VST3 AU AAX)
# For simplicity, the name of the CMake project is also the name of the target
project(${PROJECT_NAME} VERSION ${CURRENT_VERSION})
# JUCE is setup as a submodule in the /JUCE folder
# Locally, you must run `git submodule update --init --recursive` once
# and later `git submodule update --remote --merge` to keep it up to date
# On Github Actions, this is done as a part of actions/checkout
add_subdirectory(JUCE)
add_subdirectory(modules/melatonin_perfetto)
# Add any other modules you want modules here, before the juce_add_plugin call
# juce_add_module(modules/my_module)
juce_add_module(modules/sound_meter/)
juce_add_module(modules/Gin/modules/gin)
juce_add_module(modules/Gin/modules/gin_graphics)
# This adds the melatonin inspector module
add_subdirectory(modules/melatonin_inspector)
# See `docs/CMake API.md` in the JUCE repo for all config options
juce_add_plugin("${PROJECT_NAME}"
# Icons for the standalone app
ICON_BIG "${CMAKE_CURRENT_SOURCE_DIR}/packaging/icon.png"
# Change me!
COMPANY_NAME "${COMPANY_NAME}"
BUNDLE_ID "${BUNDLE_ID}"
# On MacOS, plugin is copied to ~/Users/yourname/Library/Audio/Plug-Ins/
COPY_PLUGIN_AFTER_BUILD TRUE
# Change me!
# A four-character plugin id
# First character MUST be uppercase for AU formats
PLUGIN_MANUFACTURER_CODE ObSg
# Change me!
# A unique four-character plugin id
# Note: this must have at least one upper-case character
PLUGIN_CODE PBEQ
FORMATS "${FORMATS}"
# The name of your final executable
# This is how it's listed in the DAW
# This can be different from PROJECT_NAME and can have spaces!
# You might want to use v${MAJOR_VERSION} here once you go to v2...
PRODUCT_NAME "${PRODUCT_NAME}"
AAX_CATEGORY AAX_ePlugInCategory_EQ
VST3_CATEGORIES Eq Restoration)
# This lets us use our code in both the JUCE targets and our Test target
# Without running into ODR violations
add_library(SharedCode INTERFACE)
# Enable fast math, C++20 and a few other target defaults
include(SharedCodeDefaults)
# Manually list all .h and .cpp files for the plugin
# If you are like me, you'll use globs for your sanity.
# Just ensure you employ CONFIGURE_DEPENDS so the build system picks up changes
# If you want to appease the CMake gods and avoid globs, manually add files like so:
# set(SourceFiles Source/PluginEditor.h Source/PluginProcessor.h Source/PluginEditor.cpp Source/PluginProcessor.cpp)
# file(GLOB_RECURSE SourceFiles CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/source/*.h")
set(SourceFiles
source/PluginProcessor.h
source/PluginProcessor.cpp
source/PluginEditor.h
source/PluginEditor.cpp
source/OfflineUnlockStatus.h
source/OfflineUnlockStatus.cpp
source/ProjectInfo.h
source/Gui/PresetPanel.h
source/Gui/SimpleScrollableLabel.h
source/Service/GetSupportFilesLoc.h
source/Service/PresetManager.cpp
source/Service/PresetManager.h
source/SimpleEQ/Source/SimpleEQ_PluginProcessor.h
source/SimpleEQ/Source/SimpleEQ_PluginEditor.h
source/SimpleEQ/Source/SimpleEQ_PluginEditor.cpp
)
target_sources(SharedCode INTERFACE ${SourceFiles})
# Adds a BinaryData target for embedding assets into the binary
include(Assets)
# MacOS only: Cleans up folder and target organization on Xcode.
include(XcodePrettify)
# This is where you can set preprocessor definitions for JUCE and your plugin
target_compile_definitions(SharedCode
INTERFACE
# JUCE_WEB_BROWSER and JUCE_USE_CURL off by default
JUCE_WEB_BROWSER=0 # If you set this to 1, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_plugin` call
JUCE_USE_CURL=0 # If you set this to 1, add `NEEDS_CURL TRUE` to the `juce_add_plugin` call
JUCE_VST3_CAN_REPLACE_VST2=0
# Uncomment if you are paying for a an Indie/Pro license or releasing under GPLv3
JUCE_DISPLAY_SPLASH_SCREEN=0
JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS=1
# lets the app known if we're Debug or Release
CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}"
VERSION="${CURRENT_VERSION}"
# JucePlugin_Name is for some reason doesn't use the nicer PRODUCT_NAME
PRODUCT_NAME_WITHOUT_VERSION="playBackEQ"
)
# Link to any other modules you added (with juce_add_module) here!
# Usually JUCE modules must have PRIVATE visibility
# See https://github.com/juce-framework/JUCE/blob/master/docs/CMake%20API.md#juce_add_module
# However, with Pamplejuce, you'll link modules to SharedCode with INTERFACE visibility
# This allows the JUCE plugin targets and the Tests target to link against it
target_link_libraries(SharedCode
INTERFACE
Assets
melatonin_inspector
melatonin_perfetto
gin
gin_graphics
sound_meter
juce_audio_utils
juce_audio_processors
juce_dsp
juce_gui_basics
juce_gui_extra
juce_cryptography
juce_data_structures
juce_product_unlocking
juce_core
juce::juce_recommended_config_flags
juce::juce_recommended_lto_flags
juce::juce_recommended_warning_flags)
# Link the JUCE plugin targets our SharedCode target
target_link_libraries("${PROJECT_NAME}" PRIVATE SharedCode)
target_link_libraries("${PROJECT_NAME}" PRIVATE Melatonin::Perfetto)
# IPP support, comment out to disable
# include(PamplejuceIPP)
# Everything related to the tests target
# include(Tests)
# A separate target for Benchmarks (keeps the Tests target fast)
# include(Benchmarks)
# Output some config for CI (like our PRODUCT_NAME)
include(GitHubENV)
Seems that the juce_EventLoop_linux.h header file might be being included twice somehow, resulting in the first occurrence being treated as the definition and the second inclusion as the declaration. Check that the flags you’re compiling with are the ones you’re expecting.
FWIW, I have had no problems building JUCE (7.0.12) on Raspian, but haven’t been tracking -develop much …
I tried rolling back to JUCE 7.0.12 and it breaks my build enough to be a little tricky. I can go back as far as JUCE 8.0.0 from the master branch and it still has the same error. Maybe I need to try building some of the demo projects …