I have 3 files, the library (singleton.h/.cc) and the main program (main.cc) -- singleton.h -- #pragma once #include <iostream> class singleton { public: singleton() { std::cout << __PRETTY_FUNCTION__ << std::endl; } static singleton* instance() { static singleton s; return &s; } }; -- singleton.cc -- #include "singleton.h" void foo() { singleton::instance(); } -- main.cc -- #include "singleton.h" int main() { foo(); singleton::instance(); return 0; } c++ -g -fPIC -Wall -c singleton.cc -o singleton.o c++ -fPIC -shared -Wl,-soname,libsingleton.so -o libsingleton.so singleton.o c++ -Wall -g -c main.cc -o main.o c++ -g -fPIC main.o -o main -rdynamic -L${PWD} -lsingleton -Wl,-rpath,${PWD} fsousa@neptuno ~/tmp/vis $ ./main singleton::singleton() Here, the singleton is only instanciated once as expected, but if I add visibility support to the code -- singleton.h -- #pragma once #include <iostream> class __attribute__ ((visibility("default"))) singleton { public: singleton() { std::cout << __PRETTY_FUNCTION__ << std::endl; } static singleton* instance() { static singleton s; return &s; } }; __attribute__ ((visibility("default"))) void foo(); c++ -g -fPIC -Wall -fvisibility-inlines-hidden -fvisibility=hidden -c singleton.cc -o singleton.o c++ -fPIC -fvisibility-inlines-hidden -fvisibility=hidden -shared -Wl,-soname,libsingleton.so -o libsingleton.so singleton.o c++ -Wall -g -c main.cc -o main.o c++ -g -fPIC main.o -o main -rdynamic -L${PWD} -lsingleton -Wl,-rpath,${PWD} fsousa@neptuno ~/tmp/vis $ ./main singleton::singleton() singleton::singleton() I have more than one instance. Am I doing something wrong? gcc (GCC) 4.0.1-beta20050526 (Gentoo 4.0.1_beta20050526) -- Filipe Sousa
Attachment:
pgpwYQT9MWecc.pgp
Description: PGP signature