在运行时动态加载库不起作用

Load lib dynamicly at runtime don't work

本文关键字:不起作用 加载 动态 运行时      更新时间:2023-10-16

我尝试加载一个*。因此在运行时使用以下代码:

handle = dlopen(Path, RTLD_LAZY);
create = (FunctionEquationInterface* (*)())dlsym(handle, "CreateClass");
destroy = (void (*)(FunctionEquationInterface*))dlsym(handle, "DestroyClass");

FunctionEquationInterface看起来像:

class LocalFunctionImplementation : public FunctionEquationInterface
{
public:
    virtual int CreatePolynom(vtkUnstructuredGrid *input, vtkDataArray *coefficientArray);
    virtual double Evaluate(Point *point);
};
extern "C" LocalFunctionImplementation* CreateClass();
extern "C" void DestroyClass(LocalFunctionImplementation*);

我用cmake

构建lib
add_library(${PROJECT_NAME} SHARED LocalFunctionImplementation.cpp)

问题是lib不会被加载。handle仍然是NULL

我认为这是一个问题与VTK的链接,但我不知道如何解决这个问题

好的,它可以工作。我需要TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${VTK_LIBRARIES})。因此lib将被加载