Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2010, 17:29   #11
nowaalex
Пользователь
 
Регистрация: 22.08.2010
Сообщений: 59
По умолчанию

Код:
#include "server.h"
#include <string.h>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
void * object = NULL;

extern "C" void me()
{
    if ( object ) 
	((Server *)object)->echo("ddd");
}

__attribute__((constructor)) void load()
{
    object = new Server();
}

__attribute__((destructor)) void unload()
{
    if (object) delete (Server *)object;
}

Код:
collection.cpp: In function ‘void load()’:
collection.cpp:16: ошибка: нет подходящей функции для вызова ‘Server::Server()’
server.h:30: замечание: претенденты: Server::Server(const char*)
server.h:9: замечание:              Server::Server(const Server&)
collection.so: undefined symbol: _ZN6Server12sendEchoBuffEv
ServClass завершился с кодом 1

Код конструктора ( в class.cpp )

Код:
Server::Server( const char * WorkingDirectory )
{
    RESP_HEADER = new char[ 1024 ];
    ServerDirectory = new char[ SERV_DIR_SIZE ];
    FileDirectory = new char[ SERV_DIR_SIZE ];
    MAIN_BUFFER = new char[ BUFFER_SIZE ];
    getcwd( ServerDirectory, SERV_DIR_SIZE );
    chdir( WorkingDirectory );
    getcwd( FileDirectory, SERV_DIR_SIZE );
}
nowaalex вне форума Ответить с цитированием
Старый 03.09.2010, 17:47   #12
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Там даже по-русски написано: нету такого конструктора Server::Server(). Нафига его пихать???

И вообще, у меня работает и так:

class_a.h
Код:
#pragma once

#include <iostream>

class A
{
public:

	A(const char * text) : _text(text) {}

	void write() { std::cout << _text << std::endl; }

private:

	const char * _text;

};
test.cpp:
Код:
#include "class_a.h"


A * object = NULL;

extern "C" void writeObject()
{
	if (object) object->write();
}

__attribute__((constructor)) void load()
{
	object = new A("loaded");
}

__attribute__((destructor)) void unload()
{
	if (object) delete object;
}
main.cpp:
Код:
#include <dlfcn.h>
#include <iostream>

typedef void * (* func)();

int main(int, char **)
{
	void * h = dlopen("./test.so", RTLD_LAZY);
	if (!h)
	{
		std::cout << "ERROR: " << dlerror() << std::endl;
		return 0;
	}

	func f = (func)dlsym(h, "writeObject");

	(*f)();
	
	dlclose(h);

	return 0;
}
Makefile:
Код:
main: main.cpp test.so
	g++ main.cpp -o main -ldl

test.so: test.o
	g++ -shared test.o -o test.so

test.o: test.cpp
	g++ -fPIC -c test.cpp

test.cpp: class_a.h

Последний раз редактировалось Carbon; 03.09.2010 в 17:57.
Carbon вне форума Ответить с цитированием
Старый 03.09.2010, 20:45   #13
nowaalex
Пользователь
 
Регистрация: 22.08.2010
Сообщений: 59
По умолчанию

Заработало)
nowaalex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы Kukkk Компоненты Delphi 2 26.12.2009 13:00
СИ++ Классы mikl9 Помощь студентам 2 17.06.2009 21:49
классы Ferghost Помощь студентам 3 05.06.2009 03:20
Классы в С++ Wirz Помощь студентам 1 04.06.2009 23:22