【问题标题】:Load shared library that uses another shared library加载使用另一个共享库的共享库
【发布时间】:2013-07-04 10:42:07
【问题描述】:

我是 Linux 新手,我正在尝试将我的库从 Windows 迁移到 Linux。它是本机二进制文件 (mylib.so),但将由单声道 ( [DllImport()] ) 加载。我在这个库中使用 pcre(Perl 兼容正则表达式)。当我的 .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 并在单声道下工作的库。

【问题讨论】:

  • pcre 库在加载程序的搜索目录中,是吗? ldconfig -v 显示了吗?

标签: c linux gcc mono shared-libraries


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 2014-03-04
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    相关资源
    最近更新 更多