- Home /
Need help compiling Unity Native Audio Plugins for Linux, got "multiple definition of" errors.
Hi, my game uses Unity Native Audio Plugins available here:
https://bitbucket.org/Unity-Technologies/nativeaudioplugins/downloads/
That repository includes the sources, as well as a compiled version for Win32, Win64 and Mac... but not for Linux!
The problem is: I'm a total noob in both Linux and C++.
Here is what I've done so far:
- Installed Virtual Box on my Windows 7
- Downloaded and installed a Debian 9.4 (64bits)
- Told apt-get to stop trying to get everything from the virtual install dvds instead of Internet
- apt-get update
- apt-get upgrade
- apt-get install build-essential
(for g++)
- apt-get install module-assistant
(to be able to copy-paste, drag n drop and create shared directories between my Windows and Debian)
- Created a shared directory containing the sources of Unity Native Audio Plugins
- Tried to use the Makefile I found in the sources but got multiple definition of
errors. I didn't change the sources so it must be a configuration problem. Can someone help me figure out what's going on please? Here is the output in the terminal after typing make
in the shared directory.
root@VirtualDebian64:/media/sf_SharedFiles/NativeAudioPlugin# make
g++ -I. -O2 -fPIC -c AudioPluginUtil.cpp
g++ -I. -O2 -fPIC -c Plugin_ConvolutionReverb.cpp
g++ -I. -O2 -fPIC -c Plugin_CorrelationMeter.cpp
g++ -I. -O2 -fPIC -c Plugin_Equalizer.cpp
g++ -I. -O2 -fPIC -c Plugin_Granulator.cpp
g++ -I. -O2 -fPIC -c Plugin_ImpulseGenerator.cpp
g++ -I. -O2 -fPIC -c Plugin_ImpactGenerator.cpp
g++ -I. -O2 -fPIC -c Plugin_LevelMixer.cpp
g++ -I. -O2 -fPIC -c Plugin_Lofinator.cpp
g++ -I. -O2 -fPIC -c Plugin_LoudnessMeter.cpp
g++ -I. -O2 -fPIC -c Plugin_ModalFilter.cpp
g++ -I. -O2 -fPIC -c Plugin_Multiband.cpp
g++ -I. -O2 -fPIC -c Plugin_NoiseBox.cpp
g++ -I. -O2 -fPIC -c Plugin_Oscilloscope.cpp
g++ -I. -O2 -fPIC -c Plugin_PitchDetector.cpp
g++ -I. -O2 -fPIC -c Plugin_RingModulator.cpp
g++ -I. -O2 -fPIC -c Plugin_Routing.cpp
g++ -I. -O2 -fPIC -c Plugin_SpatializerReverb.cpp
g++ -I. -O2 -fPIC -c Plugin_SpatializerReverb.cpp
g++ -I. -O2 -fPIC -c Plugin_StereoWidener.cpp
g++ -I. -O2 -fPIC -c Plugin_Synthesizer.cpp
g++ -I. -O2 -fPIC -c Plugin_TeeBee.cpp
g++ -I. -O2 -fPIC -c Plugin_TeeDee.cpp
g++ -I. -O2 -fPIC -c Plugin_Teleport.cpp
g++ -I. -O2 -fPIC -c Plugin_TubeResonator.cpp
g++ -I. -O2 -fPIC -c Plugin_Vocoder.cpp
g++ -I. -O2 -fPIC -c Plugin_WahWah.cpp
g++ -I. -O2 -fPIC -c hrtftable.cpp
g++ -shared -rdynamic -fPIC -o libAudioPluginDemo.so AudioPluginUtil*.o Plugin_ConvolutionReverb*.o Plugin_CorrelationMeter*.o Plugin_Equalizer*.o Plugin_Granulator*.o Plugin_ImpulseGenerator*.o Plugin_ImpactGenerator*.o Plugin_LevelMixer*.o Plugin_Lofinator*.o Plugin_LoudnessMeter*.o Plugin_ModalFilter*.o Plugin_Multiband*.o Plugin_NoiseBox*.o Plugin_Oscilloscope*.o Plugin_PitchDetector*.o Plugin_RingModulator*.o Plugin_Routing*.o Plugin_Spatializer*.o Plugin_SpatializerReverb*.o Plugin_StereoWidener*.o Plugin_Synthesizer*.o Plugin_TeeBee*.o Plugin_TeeDee*.o Plugin_Teleport*.o Plugin_TubeResonator*.o Plugin_Vocoder*.o Plugin_WahWah*.o hrtftable*.o
Plugin_SpatializerReverb.o: In function `SpatializerReverb::InternalRegisterEffectDefinition(UnityAudioEffectDefinition&)':
Plugin_SpatializerReverb.cpp:(.text+0x0): multiple definition of `SpatializerReverb::InternalRegisterEffectDefinition(UnityAudioEffectDefinition&)'
Plugin_SpatializerReverb.o:Plugin_SpatializerReverb.cpp:(.text+0x0): first defined here
Plugin_SpatializerReverb.o: In function `SpatializerReverb::CreateCallback(UnityAudioEffectState*)':
Plugin_SpatializerReverb.cpp:(.text+0xa0): multiple definition of `SpatializerReverb::CreateCallback(UnityAudioEffectState*)'
Plugin_SpatializerReverb.o:Plugin_SpatializerReverb.cpp:(.text+0xa0): first defined here
Plugin_SpatializerReverb.o: In function `SpatializerReverb::ReleaseCallback(UnityAudioEffectState*)':
Plugin_SpatializerReverb.cpp:(.text+0xf0): multiple definition of `SpatializerReverb::ReleaseCallback(UnityAudioEffectState*)'
Plugin_SpatializerReverb.o:Plugin_SpatializerReverb.cpp:(.text+0xf0): first defined here
Plugin_SpatializerReverb.o: In function `SpatializerReverb::SetFloatParameterCallback(UnityAudioEffectState*, int, float)':
Plugin_SpatializerReverb.cpp:(.text+0x140): multiple definition of `SpatializerReverb::SetFloatParameterCallback(UnityAudioEffectState*, int, float)'
Plugin_SpatializerReverb.o:Plugin_SpatializerReverb.cpp:(.text+0x140): first defined here
Plugin_SpatializerReverb.o: In function `SpatializerReverb::GetFloatParameterCallback(UnityAudioEffectState*, int, float*, char*)':
Plugin_SpatializerReverb.cpp:(.text+0x1a0): multiple definition of `SpatializerReverb::GetFloatParameterCallback(UnityAudioEffectState*, int, float*, char*)'
Plugin_SpatializerReverb.o:Plugin_SpatializerReverb.cpp:(.text+0x1a0): first defined here
Plugin_SpatializerReverb.o: In function `SpatializerReverb::GetFloatBufferCallback(UnityAudioEffectState*, char const*, float*, int)':
Plugin_SpatializerReverb.cpp:(.text+0x220): multiple definition of `SpatializerReverb::GetFloatBufferCallback(UnityAudioEffectState*, char const*, float*, int)'
Plugin_SpatializerReverb.o:Plugin_SpatializerReverb.cpp:(.text+0x220): first defined here
Plugin_SpatializerReverb.o: In function `SpatializerReverb::ProcessCallback(UnityAudioEffectState*, float*, float*, unsigned int, int, int)':
Plugin_SpatializerReverb.cpp:(.text+0x230): multiple definition of `SpatializerReverb::ProcessCallback(UnityAudioEffectState*, float*, float*, unsigned int, int, int)'
Plugin_SpatializerReverb.o:Plugin_SpatializerReverb.cpp:(.text+0x230): first defined here
Plugin_SpatializerReverb.o:(.bss+0x0): multiple definition of `reverbmixbuffer'
Plugin_SpatializerReverb.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
Makefile:40: recipe for target 'libAudioPluginDemo.so' failed
make: *** [libAudioPluginDemo.so] Error 1
And here is the Makefile:
SRCS=AudioPluginUtil.cpp \
Plugin_ConvolutionReverb.cpp \
Plugin_CorrelationMeter.cpp \
Plugin_Equalizer.cpp \
Plugin_Granulator.cpp \
Plugin_ImpulseGenerator.cpp \
Plugin_ImpactGenerator.cpp \
Plugin_LevelMixer.cpp \
Plugin_Lofinator.cpp \
Plugin_LoudnessMeter.cpp \
Plugin_ModalFilter.cpp \
Plugin_Multiband.cpp \
Plugin_NoiseBox.cpp \
Plugin_Oscilloscope.cpp \
Plugin_PitchDetector.cpp \
Plugin_RingModulator.cpp \
Plugin_Routing.cpp \
Plugin_Spatializer.cpp \
Plugin_SpatializerReverb.cpp \
Plugin_StereoWidener.cpp \
Plugin_Synthesizer.cpp \
Plugin_TeeBee.cpp \
Plugin_TeeDee.cpp \
Plugin_Teleport.cpp \
Plugin_TubeResonator.cpp \
Plugin_Vocoder.cpp \
Plugin_WahWah.cpp \
hrtftable.cpp
OBJS=$(SRCS:.cpp=*.o)
OUTPUT=libAudioPluginDemo.so
CXXFLAGS=-I. -O2 -fPIC
LDFLAGS=-shared -rdynamic -fPIC
CXX=g++
all: $(OUTPUT)
clean:
rm -f $(OUTPUT) $(OBJS)
$(OUTPUT): $(OBJS)
$(CXX) $(LDFLAGS) -o $(OUTPUT) $(OBJS)
.cpp.o:
$(CXX) $(CXXFLAGS) -c $<
Bonus question: How can I compile a version for Linux 32 and a version for Linux 64?
Your answer
Follow this Question
Related Questions
Native Plugin works in editor but not in build 0 Answers
Using a fixed size pointer in Unity C# with a C++ external function 0 Answers
Texture2D manipulation in c++ dll Plugin 0 Answers
Native Plugin Cleanup 0 Answers
How to access USB on Linux 1 Answer