Вот что я сделал, я хочу изящно обработать это исключение:
code_snippet: my.cpp
#include<iostream>
extern "C" void some_func()
{
throw "(Exception Thrown by some_func!!)";
}
code_snippet: exception.c
#include <stdio.h>
extern void some_func();
int so_main()
{
some_func();
return 0;
}
Из двух приведенных выше фрагментов я создал shared_object libexception.so с помощью следующих команд:
g++ -c -fPIC src/my.cpp
gcc -c -ansi -fPIC src/exception.c
g++ -fPIC -shared -o libexception.so
Затем я вызвал функцию so_main из моего main.cpp.
code_snippet: main.cpp
#include<iostream>
#include <dlfcn.h>
using namespace std;
extern "C" void some_func();
int main()
{
int (*fptr)() = 0;
void *lib = dlopen("./libexception.so", RTLD_LAZY);
if (lib) {
*(void **)(&fptr) = dlsym(lib, "so_main");
try{
if(fptr) (*fptr)(); <-- problem lies here
//some_func(); <-- calling this directly won't crash
}
catch (char const* exception) {
cout<<"Caught exception :"<<exception<<endl;
}
}
return 0;
}
последняя команда: g ++ -g -ldl -o main.exe src / main.cpp -L lib / -lexception
При выполнении main.exe происходит сбой. Может ли кто-нибудь помочь мне определить, в чем заключается проблема и как избежать этого сбоя (У нас уже есть архитектура, в которой некоторые .SO вызывают функцию extern c ++, поэтому ее нельзя изменить, мы хотим обрабатывать ее только в main.cpp )