问题标签 [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.
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 为适当的平台加载它们?
ios - 函数 'dlopen()' 是私有 API 吗?
我想使用函数 'dlopen()' 来调用 iOS 平台上的动态库,函数 'dlopen()' 是私有 API 吗?
c++ - C++ 静态链接共享库
我有一个共享库,由我无法控制的另一个应用程序使用,它需要 *.so 对象。我的库使用了需要与其静态链接的 sqlite3(我绝对需要一个自包含的二进制文件)。
当我尝试编译和链接我的库时:
我最终得到以下错误:
使用 -fPIC 重新编译与什么有关?我的代码还是 CRT?
我已经尝试使用 -fPIC 编译我的对象,结果相同。
谢谢。
编辑:
该问题似乎与 SQLite3 无关。
我写了一个简单的单行无操作库,它编译和链接如下:
但不是这样:
该问题似乎与 CRT (crtbeginT.o) 有关。我应该重新编译 GCC --with-pic 还是什么?
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 的扫描?
dylib - dlopen() 找不到错误图像
我有首先加载 .dylib 的软件,让我们使用以下命令调用 libFirst.dylib:
稍后在加载的 libFirst.dylib 的函数内部,我尝试使用相同的命令加载另一个 .dylib,但对于 libSecond.dylib,此共享库的加载在我的 Xcode 控制台中给了我以下警告:
我没有得到的是它说 libFirst.dylib 没有加载,但我目前在 libFirst.dylib 的一个函数中,那么这怎么可能呢?
我在 DYLD_LIBRARY_PATH 中的所有路径也似乎正确。
在此先感谢,我已经坚持了好几天了。
xcode - Xcode:如何将我的 .app 项目也构建为共享库?
首先,我在 MAC OS X 10.6 上使用 Xcode 3.2.5
我有一个构建和运行良好的 Cocoa 应用程序项目。我在这个项目中有一些函数,我正在使用这些函数导出:
如果我希望另一个动态库项目能够链接到我的原始 Cocoa 应用程序,以便它可以使用导出的 GetIUIEventHandler 函数,我需要做什么?
我还需要将原始 Cocoa 应用程序构建为动态库吗?或者有没有办法链接可可应用程序的可执行文件?
c - 动态模块中的内存分配问题
我的程序成功加载了一个库 (dlopen(..., RTLD_GLOBAL | RTLD_NOW);)。在库中,我有一个调用 malloc() 函数的函数。当我尝试分配一小块内存(例如,120 字节)时,该函数运行良好。但是,如果我尝试获取更多(例如,1024 字节),我的应用程序将因长报告而死,例如:
没有任何数据交换、共享变量、线程等。
主应用程序中的内存分配与其动态库之间是否有一些不同?
linker - 使用 -Bsymbolic-functions 有缺点吗?
我最近在 GNU ld 中发现了链接器选项“-Bsymbolic-functions”:
这似乎与 GCC 选项相反,-fvisibility=hidden
因为它不是阻止将引用的函数导出到其他共享对象,而是阻止对该函数的库内部引用绑定到不同共享对象的导出函数。我告诉自己这-Bsymbolic-functions
将阻止为函数创建 PLT 条目,这是一个很好的副作用。
但我想知道是否可能对此进行更细粒度的控制,例如覆盖
-Bsymbolic
库的各个函数定义。我应该知道使用的任何陷阱
-Bsymbolic-functions
吗?我打算只使用它,因为-Bsymbolic
我认为这会破坏异常(我认为它会使对 typeinfo 对象的引用不统一)。
谢谢!
dynamic-linking - 动态链接:用于索引重定位表的偏移值
我试图了解动态链接过程......对库函数的调用(我们称之为func
)通过plt
表。我知道当符号尚未重新定位时,函数的调用从plt
包含一个指令(比如i1
)的表传递,就像jmp *function_in_GOT
指向下一条指令之后的指令i1
一样push $offset
:在控件传递给修复相对的动态链接器之后GOT
带有函数地址的条目。offset
应该是重定位表中条目的索引,但我不明白......如何通过读取可执行文件的精灵来找到这个值。有可能
找东西?例如,我编写了一个非常简单的程序,它只使用printf
andstrcpy
并且上一个命令的输出是:
例如,通过阅读gdb
从 开始的说明printf@plt
:
我们可以看到 的值offset
是0x18
(十进制的 24),但读取 的输出objdump
似乎printf
从第一个 reloc 条目的偏移量是0x1c
。
一些想法?
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)。