Linker multiple definition errors

i have gotten my c++ plugin with custom blueprint to compile, but now it fails at the linker stage with the errors below.
the errors complain that i have multiple definitions of my helper functions which i have in my header, i’m using #pragma once so i’m confused why the linker sees multiple definitions.

/bin/sh  -c '/bin/sh "/home/raptor/UnrealEngine/Engine/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/FixDependencies.sh" && echo "Dummy" >> "/home/raptor/UnrealEngine/Engine/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/UE4Editor.link"'
Performing 4 actions (4 in parallel)
[1/4] Compile MyPlugin.generated.cpp
[2/4] Compile Module.MyPlugin.cpp
[3/4] Link libUE4Editor-MyPlugin.so
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `__xpath__R(std::__1::shared_ptr<__object__>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<__object__>, std::__1::shared_ptr<std::__1::set<std::__1::shared_ptr<__object__>, std::__1::less<std::__1::shared_ptr<__object__> >, std::__1::allocator<std::__1::shared_ptr<__object__> > > >)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:290: multiple definition of `__xpath__R(std::__1::shared_ptr<__object__>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<__object__>, std::__1::shared_ptr<std::__1::set<std::__1::shared_ptr<__object__>, std::__1::less<std::__1::shared_ptr<__object__> >, std::__1::allocator<std::__1::shared_ptr<__object__> > > >)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:290: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `__xpath__r(std::__1::shared_ptr<__object__>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:310: multiple definition of `__xpath__r(std::__1::shared_ptr<__object__>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:310: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `__new_object__(double, int)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:256: multiple definition of `__new_object__(double, int)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:256: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `shared_ptr':
/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/memory:4313: multiple definition of `__new_question__(std::__1::shared_ptr<__object__>)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/memory:4313: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `__split_string__(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:32: multiple definition of `__split_string__(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:32: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `std::__1::shared_ptr<__object__>::operator->() const':
/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/memory:4051: multiple definition of `len(std::__1::shared_ptr<__object__>)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/memory:4051: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `std::__1::shared_ptr<std::__1::map<std::__1::weak_ptr<__object__>, double, std::__1::owner_less<std::__1::weak_ptr<__object__> >, std::__1::allocator<std::__1::pair<std::__1::weak_ptr<__object__> const, double> > > >::operator->() const':
/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/memory:4051: multiple definition of `len(std::__1::shared_ptr<std::__1::map<std::__1::weak_ptr<__object__>, double, std::__1::owner_less<std::__1::weak_ptr<__object__> >, std::__1::allocator<std::__1::pair<std::__1::weak_ptr<__object__> const, double> > > >)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/memory:4051: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__get_short_size() const':
/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/string:1777: multiple definition of `len(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/string:1777: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `str(std::__1::pair<std::__1::weak_ptr<__object__>, double>)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:262: multiple definition of `str(std::__1::pair<std::__1::weak_ptr<__object__>, double>)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:262: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `str(double)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:269: multiple definition of `str(double)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:269: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `str(unsigned long)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:270: multiple definition of `str(unsigned long)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:270: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `std::__1::shared_ptr<__object__>::operator->() const':
/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/memory:4051: multiple definition of `__int__(std::__1::shared_ptr<__object__>)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/memory:4051: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `__int__(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:283: multiple definition of `__int__(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:283: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `__int__(double)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:282: multiple definition of `__int__(double)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:282: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `__xpath__(std::__1::shared_ptr<__object__>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)':
/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:285: multiple definition of `__xpath__(std::__1::shared_ptr<__object__>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/../../../Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Source/MyPlugin/Public/IMyPlugin.h:285: first defined here
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/MyPlugin.generated.cpp.o: In function `unsigned long std::__1::__str_find<char, unsigned long, std::__1::char_traits<char>, 18446744073709551615ul>(char const*, unsigned long, char const*, unsigned long, unsigned long)':
/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/string:980: multiple definition of `__spawned_threads__'
/home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/MyPlugin/Module.MyPlugin.cpp.o:/home/raptor/UnrealEngine/Engine/Source/ThirdParty/Linux/LibCxx/include/c++/v1/string:978: first defined here
clang-3.9: error: linker command failed with exit code 1 (use -v to see invocation)
ERROR: UBT ERROR: Failed to produce item: /home/raptor/Documents/Unreal Projects/MyProject/Plugins/MyPlugin/Binaries/Linux/libUE4Editor-MyPlugin.so
Total build time: 57.69 seconds

#pragma once just stops the same file being included into the same compilation unit more than once, but it doesn’t stop the same file being included into different compilation units.

If those functions are defined in a header, and aren’t inside a struct or class (so are global or inside a namespace), then you’ll either need to define them inline, or split their definition into a .cpp file.

thanks, marking the functions as inline solved this problem.

Thank you man. This got me past the linking problem. Now the issue is, that adding

PublicAdditionalLibraries.Add(Path.Combine(ModuleDirectory, “path/to/my/shared/object/mysharedobject.so”));

doesn’t do the work, and in-code .so methods are considered undefined. Please comment on it if you can here or in the relevant question here:

EDIT: “inline” is not the option when packaging to Android (which i am trying to perform). Enclosed all of the functions in class, and i am back to the multiple definition error. To clarify, my error is:

UATHelper: Packaging (Android (ETC1)): UnrealBuildTool: D:/AndroidSDK/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/…/…/…/…/arm-linux-androideabi/bin\ld: error: Extn/ExtnLibName.cpp-armv7-es2.o: multiple definition of 'GFNameTableForDebuggerVisualizers_MT’
UATHelper: Packaging (Android (ETC1)): UnrealBuildTool: D:/AndroidSDK/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/…/…/…/…/arm-linux-androideabi/bin\ld: MyProj/MyProj.cpp-armv7-es2.o: previous definition here
UATHelper: Packaging (Android (ETC1)): UnrealBuildTool: D:/AndroidSDK/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/…/…/…/…/arm-linux-androideabi/bin\ld: error: Extn/ExtnLibName.cpp-armv7-es2.o: multiple definition of 'GInternalGameName’

Same goes for multiple definition of ‘GIsDebugGame’ , multiple definition of ‘GIsGameAgnosticExe’ , multiple definition of ‘GObjectArrayForDebugVisualizers’ , multiple definition of ‘operator delete , multiple definition of 'operator delete[](void, std::nothrow_t const&)’* , multiple definition of 'operator delete(void)’*

And a few more…