我们有一个最小的dlopen工作示例。
void* lib = dlopen("servlets.so", RTLD_NOW);
void* p = dlsym(lib, "getServlets");
但是,如果我们向共享库中添加另一个函数(即使它被调用),那么该库也不起作用(即使代码永远不会被调用)
uint32_t count = 0;
Servlet** servlets;
extern "C" {
void generate() {
servlets = new Servlet*[3];
servlets[0] = new Servlet(...);
}
Servlet** getServlets() { return servlets; }
uint32_t getServletNum() { return count; }
}
这一定是因为共享对象中的代码引用了一些我们没有的符号,但我们不知道是什么。 代码编译和链接没有问题。
有没有办法找出错误是什么?除了库指针返回NULL并且库未加载外,没有报告错误。
我们如何链接到库以便dlopen工作?
答案 0 :(得分:1)
除了库指针返回NULL
外,没有报告错误
库指针无法返回任何内容。您可能意味着dlopen()
会返回NULL
。
如果这就是你的意思,即报告的错误。如果您想了解有关为什么错误的详细信息,请使用dlerror()
查找。