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

标签 c linux gcc mono shared-libraries

我是 Linux 菜鸟,我正在尝试将我的图书馆从 Windows 转移到 Linux。它是 native 二进制文件 (mylib.so),但它将由单声道 ( [DllImport()] ) 加载。我在这个库中使用了 pcre(Perl 兼容正则表达式)。当我的 .NET 可执行文件尝试加载 mylib.so 时,它抛出异常(找不到库)。当我设置 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 和 dl (-l:libmylib.so.1.1 -ldl) 的简单测试程序并且它有效。

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

我想要的只是创建使用 pcre 并在单声道下工作的库。

最佳答案

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

关于c - 加载使用另一个共享库的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17468221/

相关文章:

c - 如何在gcc中检测CPU id

c# - 在 C# 中调用 C 函数

带有 truecrypt 密码隐藏的 Linux bash shell 脚本

linux - If/then 语句与 awk

c++ - dynamic_cast 在 linux 编译上的 "long distance"兄弟之间失败

c - 为什么每次在 GDB 中构建 + 反汇编函数时都会得到相同的地址?

c++ - 相同的代码由 clang 编译但在 gcc 中失败

c++ - OpenCL 因大输入数组而崩溃

c - 静态库中的外部变量,使用 Objective-C

php - 文件上传权限