LINUX.ORG.RU

_init() и _fini() как это юзать?


0

0

Что я делаю не так?

$ 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

Re: _init() и _fini() как это юзать?

Залинковать на libgcc.a

eg0_dist0rti0n ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.