Извиняюсь за ламерский вопрос, но можно ли вызывать метод класса находящегося в so или же придётся каждую функцию выносить через extern «C»?
Есть класс помещённый в so. Есть программа которая её подключает, создаёт объект и вызывает метод.
Код:
// mydb.h
class mydb{
public:
mydb(...);
int test();
int p;
};
typedef mydb* mydb_t(...);
/********************************/
// mydb.cpp
#include "mydb.h"
mydb::mydb()
{
}
int mydb::test()
{
return p;
}
extern "C" mydb *mydb_new(...)
{
return new mysqldb(...);
}
/*************************************/
// someapp.cpp
#include "mydb.h"
void *lib_handle;
lib_handle = dlopen("libnmydb.so.0.1", RTLD_LAZY);
if (!lib_handle) {
printf("can't open shared\n");
exit(1);
}
mydb_t *mydb_ = (mydb_t*) dlsym(lib_handle, "mydb_new");
if (!mydb_) {
printf("can't load symbol\n");
exit(1);
}
mydb *mdb = mydb_new(...);
// так ошибка при линковке
printf("%i\n",mdb->test());
// так всё работает
printf("%i\n",mdb->p);
/************************************************************/
при компиляции:
someapp.cpp:27: undefined reference to `mydb::test()'
someapp.cpp:27: undefined reference to `mydb::test()'
Заранее спасибо!