问题标签 [dynamic-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
395 浏览

java - eclipse 在哪里寻找插件中的二进制库?

我有一个 Eclipse 插件(由第三方开发,没有可用的源代码),它使用二进制库来完成它的一些工作。该库是开源的。分布式插件仅包含 Windows 的二进制文件,但我可以轻松地为其他平台编译它。我不知道在哪里放置图书馆以便将其拾取。我目前正在使用 OS X,但 Linux 也是一个问题。

Windows 库位于 eclipse/plugins/plugin_name/os/win32/x86 中。我试过使用 os/macosx/x86_64 (对应于 org.eclipse.osgi.service.environments 中的常量)和一堆其他变体,但没有任何作用,我找不到任何关于 eclipse 如何设置的文档库路径。

我应该在哪里将库放在插件子目录中,以便 eclipse 为适当的平台加载它们?

0 投票
1 回答
12157 浏览

ios - 函数 'dlopen()' 是私有 API 吗?

我想使用函数 'dlopen()' 来调用 iOS 平台上的动态库,函数 'dlopen()' 是私有 API 吗?

0 投票
3 回答
31128 浏览

c++ - C++ 静态链接共享库

我有一个共享库,由我无法控制的另一个应用程序使用,它需要 *.so 对象。我的库使用了需要与其静态链接的 sqlite3(我绝对需要一个自包含的二进制文件)。

当我尝试编译和链接我的库时:

我最终得到以下错误:

使用 -fPIC 重新编译与什么有关?我的代码还是 CRT?

我已经尝试使用 -fPIC 编译我的对象,结果相同。

谢谢。

编辑:

该问题似乎与 SQLite3 无关。

我写了一个简单的单行无操作库,它编译和链接如下:

但不是这样:

该问题似乎与 CRT (crtbeginT.o) 有关。我应该重新编译 GCC --with-pic 还是什么?

0 投票
0 回答
239 浏览

visual-studio - 引用间接引用的 DLL 时,MSBuild 与 Visual Studio 不匹配

我很抱歉提出这个问题,但我很确定答案是“MSBuild 是愚蠢的,VS 是聪明的”。

间接引用的 DLL 是从直接引用的 DLL 引用但在项目中根本没有引用的 DLL。

我有项目 A(Web 应用程序)引用项目 B(类库)。项目 B 有一个对 DLL 1 的直接引用(意味着它在项目中实际使用)。DLL 1 有一个对 DLL 2 的引用。

当我在 Visual Studio 中构建时,DLL 1 和 DLL 2 都被复制到项目 A(Web 应用程序)中的本地 bin。当我使用 MSBuild 构建时,DLL 2 不会复制到项目 A 中的本地 bin。

有什么方法可以解决这个问题,而不使用 lib 方法并将 DLL 标记为复制到 bin(作为文件而不是参考),然后添加对 /bin/lib 的扫描?

0 投票
3 回答
12713 浏览

dylib - dlopen() 找不到错误图像

我有首先加载 .dylib 的软件,让我们使用以下命令调用 libFirst.dylib:

稍后在加载的 libFirst.dylib 的函数内部,我尝试使用相同的命令加载另一个 .dylib,但对于 libSecond.dylib,此共享库的加载在我的 Xcode 控制台中给了我以下警告:

我没有得到的是它说 libFirst.dylib 没有加载,但我目前在 libFirst.dylib 的一个函数中,那么这怎么可能呢?

我在 DYLD_LIBRARY_PATH 中的所有路径也似乎正确。

在此先感谢,我已经坚持了好几天了。

0 投票
2 回答
199 浏览

xcode - Xcode:如何将我的 .app 项目也构建为共享库?

首先,我在 MAC OS X 10.6 上使用 Xcode 3.2.5

我有一个构建和运行良好的 Cocoa 应用程序项目。我在这个项目中有一些函数,我正在使用这些函数导出:

如果我希望另一个动态库项目能够链接到我的原始 Cocoa 应用程序,以便它可以使用导出的 GetIUIEventHandler 函数,我需要做什么?

我还需要将原始 Cocoa 应用程序构建为动态库吗?或者有没有办法链接可可应用程序的可执行文件?

0 投票
1 回答
106 浏览

c - 动态模块中的内存分配问题

我的程序成功加载了一个库 (dlopen(..., RTLD_GLOBAL | RTLD_NOW);)。在库中,我有一个调用 malloc() 函数的函数。当我尝试分配一小块内存(例如,120 字节)时,该函数运行良好。但是,如果我尝试获取更多(例如,1024 字节),我的应用程序将因长报告而死,例如:

没有任何数据交换、共享变量、线程等。

主应用程序中的内存分配与其动态库之间是否有一些不同?

0 投票
4 回答
15330 浏览

linker - 使用 -Bsymbolic-functions 有缺点吗?

我最近在 GNU ld 中发现了链接器选项“-Bsymbolic-functions”:

这似乎与 GCC 选项相反,-fvisibility=hidden因为它不是阻止将引用的函数导出到其他共享对象,而是阻止对该函数的库内部引用绑定到不同共享对象的导出函数。我告诉自己这-Bsymbolic-functions将阻止为函数创建 PLT 条目,这是一个很好的副作用。

  1. 但我想知道是否可能对此进行更细粒度的控制,例如覆盖-Bsymbolic库的各个函数定义。

  2. 我应该知道使用的任何陷阱-Bsymbolic-functions吗?我打算只使用它,因为-Bsymbolic我认为这会破坏异常(我认为它会使对 typeinfo 对象的引用不统一)。

谢谢!

0 投票
2 回答
2667 浏览

dynamic-linking - 动态链接:用于索引重定位表的偏移值

我试图了解动态链接过程......对库函数的调用(我们称之为func)通过plt表。我知道当符号尚未重新定位时,函数的调用从plt包含一个指令(比如i1)的表传递,就像jmp *function_in_GOT指向下一条指令之后的指令i1一样push $offset:在控件传递给修复相对的动态链接器之后GOT带有函数地址的条目。offset应该是重定位表中条目的索引,但我不明白......如何通过读取可执行文件的精灵来找到这个值。有可能

找东西?例如,我编写了一个非常简单的程序,它只使用printfandstrcpy并且上一个命令的输出是:

例如,通过阅读gdb从 开始的说明printf@plt

我们可以看到 的值offset0x18(十进制的 24),但读取 的输出objdump似乎printf从第一个 reloc 条目的偏移量是0x1c

一些想法?

0 投票
2 回答
6085 浏览

c - 全局变量、共享库和 -fPIC 效果

我制作了一段代码,它包含在一个动态库 ( lib.c) 和一个主可执行文件 ( main.c) 中。在这两个文件中,我定义了一个名为: 的全局变量int global。不是很聪明,但这不是问题。

当我编译动态库时,该-fPIC选项似乎是强制性的:

否则我得到:

当我编译可执行文件时,它不是。

两者都有效,但有不同的行为我无法解释,你可以吗?:

使用 -fPIC,main.c 中的 global 和 lib.c 中的 global 是相同的变量:

如果没有 -fPIC,lib.c 中的全局与 main.c 中的全局无关:

这是来源:

库文件

主程序

gcc --version: gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2

uname -a: Linux xxx 2.6.38-11-generic #48-Ubuntu SMP Fri Jul 29 19:02:55 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

编辑:在 SUN/sparc 和 x86/Linux 架构下测试的代码具有相同类型的意外共享全局变量(使用 -fPIC)。