加载使用另一个共享库的共享库

时间:2013-07-04 10:42:07

标签: c linux gcc mono shared-libraries

我是Linux菜鸟,我正在尝试将我的库从Windows迁移到Linux。它是原生二进制文件(mylib.so),但它将由mono([DllImport()]加载。我在这个库中使用了pcre(Perl Compatible Regular Expressions)。当我的.NET可执行文件尝试加载mylib.so时,它会抛出异常(找不到lib)。当我设置MONO_LOG_LEVEL=debug时。我说找到了我的库,但是pcre库不是。

我试图动态加载它(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的库并在mono下工作。

1 个答案:

答案 0 :(得分:0)

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