加载使用其他共享库的共享库

问题描述:

我是Linux新手,我试图将我的库从Windows移至Linux。它是本机二进制文件(mylib.so),但它将由mono([DllImport()])加载。我在这个库中使用了pcre(Perl Compatible Regular Expressions)。当我的.NET可执行文件尝试加载mylib.so时,它会抛出异常(找不到lib)。当我设置MONO_LOG_LEVEL=debug。我说我的图书馆已经找到,但是图书馆没有。加载使用其他共享库的共享库

我试图加载它动态(dlopen(), dlsym())。当我构建我的库的可执行版本与dl(-ldl)链接时,它可以正常工作。但是当我从单声道加载它时,我得到了SIGSEGV。

我创建这个图书馆等(版本DL):

g++ -fPIC -c *.cpp 
g++ -shared -Wl,-soname,libmylib.so.1.1 -ldl -o libmylib.so.1.1 *.o 

我已经创建,对mylib.so and dl链接简单的测试程序(-l:libmylib.so.1.1 -ldl)和它的作品。

我想我需要强制mylib链接到dl(或直接与pcre),但我不知道如何。 (我希望这是可能的)

所有我想要的是创建使用pcre和单声道工作的库。

+1

pcre lib在装载机的搜索区域内,是吗? ldconfig -v显示它? – Joe

您错误地链接了您的库:如果它使用libpcre,则必须将它与-lpcre选项链接。