Dear readers, I encountered a problem in my project when using *Boost.Exception* with the predefined types errinfo_xyz in a library project. I have two classes ClassA and ClassB in my library which both throw a boost::exception with errinfo_api_function type in their implementation file (.cpp) These both classes are compiled into a static library with the C/C++-Flags -fvisibility=hidden. Then I have a main.cpp which creates an instance of ClassA and ClassB and links to the library which contains ClassA.o and ClassB.o. When I compile the main.cpp I get the linker error duplicate symbol for the errinfo_api_function object in ClassA.o and ClassB.o. If I remove the visibility=hidden flag, it links without problems. I am not an expert on the compiler flags, but I saw that many libraries use the visibility=hidden flag so I think it would be good, if my lib could also use it. For a better description I will show the sources for my project: ClassA.h ------------------------------------------------------------------------------------------------- #pragma once #include <boost/exception/all.hpp> struct my_errorA : virtual std::exception, virtual boost::exception {}; class ClassA { public: ClassA() {}; virtual ~ClassA() {}; virtual void doSomething(); }; ClassA.cpp ------------------------------------------------------------------------------------------------- #include "ClassA.h" void ClassA::doSomething() { BOOST_THROW_EXCEPTION( my_errorA() << boost::errinfo_api_function("doSomething") ); } ClassB.h ------------------------------------------------------------------------------------------------- #pragma once #include <boost/exception/all.hpp> struct my_errorB : virtual std::exception, virtual boost::exception {}; class ClassB { public: ClassB() {}; virtual ~ ClassB() {}; virtual void doSomething(); }; ClassB.cpp ------------------------------------------------------------------------------------------------- #include "ClassB.h" void ClassB::doSomething() { BOOST_THROW_EXCEPTION( my_errorB() << boost::errinfo_api_function("doSomething") ); } main.cpp ------------------------------------------------------------------------------------------------- #include "ClassA.h" #include "ClassB.h" int main(int argc, const char * argv[]) { ClassA A; ClassB B; return 0; } The Linker output: ----------------------------------------------------------------------------------------------------------------- *Ld /Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Products/Debug/ExceptionTest normal i386 cd /Users/georg/work/ExceptionTest setenv MACOSX_DEPLOYMENT_TARGET 10.8 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -L/Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Products/Debug -F/Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Products/Debug -filelist /Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Intermediates/ExceptionTest.build/Debug/ExceptionTest.build/Objects-normal/i386/ExceptionTest.LinkFileList -mmacosx-version-min=10.8 /Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Products/Debug/libExceptionLib.a -o /Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Products/Debug/ExceptionTest duplicate symbol __ZTIPN5boost21errinfo_api_function_E in: /Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Products/Debug/libExceptionLib.a(ClassA.o) /Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Products/Debug/libExceptionLib.a(ClassB.o) duplicate symbol __ZTSPN5boost21errinfo_api_function_E in: /Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Products/Debug/libExceptionLib.a(ClassA.o) /Users/georg/Library/Developer/Xcode/DerivedData/ExceptionTest-dcnvciwqbwqvciaokkjjaqchftll/Build/Products/Debug/libExceptionLib.a(ClassB.o) ld: 2 duplicate symbols for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)* ----------------------------------------------------------------------------------------------------------------- I hope I described the problem well enough and I hope someone can explain what the problem is? Thank a lot and best regards Georg