Ключевые слова:example, lib, compile, (найти похожие документы)
From: Vladimir Dozen <dozen@osw.com.ru>
Newsgroups: fido7.ru.unix.prog
Subject: Пример обработки исключений в C++ программе
> Пишу вот библиотечку под свои нужды, активно юзаю в ней исключения,
> хочется еще и _init ()/ _fini () под свои нужды запользовать. AFAIR они
> используются для (де)инициализации механизма обработки исключений
Господи, уже второй обвиняет бедные функции в чем ни попадя. Нет,
они не используются.
> напрямую их использовать не получается ;(
Чего тебе надо-то? Исключения прекрасно кидаются из библиотеки
в основной бинарник (FreeBSD 5.0-CURRENT, g++ 2.95.3):
test.cpp:
===============
#include <stdio.h>
#include <dlfcn.h>
#include <string>
#include <stdexcept>
#if defined(EXE)
int main()
{
void* so;
int (*hl)();
so = dlopen("./libtest.so",0);
if( !so ){ printf("%s\n",dlerror()); exit(1); }
hl = (int(*)())dlsym(so,"hello");
if( !hl ){ printf("%s\n",dlerror()); exit(1); }
if( hl )
{
try
{
hl();
}
catch(const std::exception& ex)
{
std::cerr << "catched: " << ex.what() << std::endl;
}
}
return 0;
}
#endif
#if defined(SO)
extern "C" void _init()
{
puts("init");
}
extern "C" int hello()
{
puts("hellooooooooooooooooo");
throw std::logic_error("ex from so");
return 5;
}
#endif
===============
Makefile:
===============
all: test libtest.so
FLAGS=-Wall -g -O -fPIC
test: test.o Makefile
g++ -DEXE $(FLAGS) test.cpp -o test
libtest.so: test.cpp Makefile
g++ -shared -DSO $(FLAGS) -c test.cpp -o libtest.o
ld -shared -o libtest.so libtest.o
===============
--
dozen @ home