重复的动态加载:segmention故障

时间:2019-01-28 02:34:54

标签: segmentation-fault dlopen loadlibrary

我写了一个库,使用tesseract.dllleptonica.dll与动态加载(LoadLibrary在Windows和dlopen在Linux)。 Tesseract在内部也使用了leptonica,但这是隐式加载而不是动态加载。

我的图书馆运作良好的窗口,但是当它移植到Ubuntu的,当它的tesseract LIB调用leptonica功能出现segfaults。可能是由重复的符号引起的。

如果我将leptonica加载更改为隐式加载(通过将-llept添加到LDFLAGS),则在tesseract调用第一个leptonica函数(convertOnBigEnd16)时出现分段错误。

如何加载libray与dlopen,这已经装载了内隐加载?

我已经尝试了以下内容。

dlopen("liblept.so", RTLD_LAZY|RTLD_NOLOAD|RTLD_GLOBAL); //(dlopen manual says ' a library that was previously loaded with RTLD_LOCAL can be reopened with RTLD_NOLOAD | RTLD_GLOBAL')
dlopen("liblept.so", RTLD_LAZY|RTLD_LOCAL);

但是所有试验都是分段错误(所有dlopendlsym返回成功,并且函数指针是正常的,但会导致段错误)

[bliefly其他试验]

libtesseract.so的隐式加载+ liblept.so的隐式加载在lib中:运行良好

dlopen的{​​{1}} + libtesseract.so的{​​{1}}在主:工作良好

dlopen的{​​{1}} + liblept.so的{​​{1}}在LIB:SEG故障

为什么只有最后一种情况下使段错误?

在故障时,leptonica函数指针不为空,调试器提示

dlopen

和反汇编代码不匹配libtesseract.so的输出。

如何加载与libray dlopen在LIB后它已经被加载implictly?

0 个答案:

没有答案