Что я делаю не так?
$ cat libexample.h
class example_class{
public:
example_class(){};
virtual ~example_class(){};
};
extern example_class* example_creator();
$ cat libexample.cpp
using namespace std;
#include <iostream>
#include "libexample.h"
void _init(){
cout << "Library libexample loaded" << endl;
};
void _fini(){
cout << "Library libexample unloaded" << endl;
};
class example_class2 : public example_class
{
public:
example_class2()
{
cout << "Example2's constructor is called" << endl;
}
virtual ~example_class2()
{
cout << "Example2's destructor is called" << endl;
}
};
example_class* example_creator()
{
return new example_class2;
}
$ cat main.cpp
using namespace std;
#include "libexample.h"
int main()
{
example_class *ex = example_creator();
delete ex;
return 0;
}
собираю:
$ g++ -shared -fPIC -nostartfiles -o libexample.so libexample.cpp
$ g++ -o main -L./ -lexample main.cpp
/usr/bin/ld: main: hidden symbol `__dso_handle' in /usr/lib/gcc-lib/i486-linux-gnu/3.3.6/crtbegin.o is referenced by DSO
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status