Filipe Sousa
2005-06-03 10:25:44 UTC
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}
***@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}
***@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
-- 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}
***@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}
***@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