我尝试使用以下代码在运行时加载* .so:
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的链接有关,但我不知道如何解决这个问题。
答案 0 :(得分:0)
好的确有效。我需要TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${VTK_LIBRARIES})
。所以将加载lib