问题标签 [dynamic-linking]
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.
windows - MFC 罐头 DllMain 不为 DLL_PROCESSS_DETACH 调用 ExitInstance?
MFC 8.0 的罐装 DllMain 在获得 DLL_PROCESS_DETACH 时似乎不会调用 ExitInstance。一种可能的解决方案是定义我自己的 DllMain,但我如何告诉链接器使用我的而不是 MFC?
或者,是否有另一个我不知道的在 DLL_PROCESS_DETACH 上被调用的覆盖?
c - 如何在动态链接库中引用全局变量?
环境是 32 位 SPARC 上的 Solaris,但我认为这是动态链接和/或与位置无关的代码更普遍的问题。
我有一个汇编程序,我将其编译为与位置无关的代码,并从 C 程序动态链接到它。它工作正常,除了我不能从汇编程序中引用汇编程序保留的任何内存。在汇编程序中跳转可以正常工作。
我只想在汇编程序中读取和写入内存,但是任何时候我尝试都会遇到分段错误。
我写了这个测试程序来调试这个问题
我编译这个
作为 -K PIC -b
并在 C 中 dlopen 生成的 .so
当我打电话时dl_testprog()
,它会打印“4”。如果我尝试打印 testprog 或 print_int 的地址,它也会打印“4”。跳转到一个标签,其他一切都很好。查看反汇编,foo 被替换为 0x0,就像它应该的那样。
我是否必须通过_GLOBAL_OFFSET_TABLE_
或其他什么,才能在汇编程序中写入我自己的内存?如果是这样,我该怎么做?我尝试的一切都导致了段错误,并且我无法找到一个很好的指导如何做到这一点(这让我相信你不应该这样做。这不是链接器问题吗?) .
c++ - 将 C++ 源代码构建为库 - 从哪里开始?
几个月来,我编写了一些很好的通用功能,我想将其构建为库并动态链接,而不是导入 50 多个头文件/源文件。
该项目在 Xcode 和 Dev-C++ 中维护(我知道我可能必须使用命令行来做我想做的事情)并且必须链接到 OpenGL 和 SDL(在 SDL 的情况下是动态的)。目标平台是 Windows 和 OS X。
我到底在看什么?
- 如果需要,我的图书馆的入口点是什么?
- 我必须在我的代码中更改什么?(调用约定?)
- 我该如何释放它?我的理解是,头文件和编译的库(.dll、.dylib(、.framework),无论它是什么)都需要可用于项目 - 特别是因为模板功能本质上不能包含在库中。
- 我还需要注意什么?
c++ - 消除与 C++ 动态库的编译器间不兼容问题
...,对此的跟进。
从我对引用问题的回答中,我了解到:
- 不同的编译器使用不同的名称修饰,这使得在使用编译器 B 构建的项目中无法使用使用编译器 A 构建的 C++ 动态库,
- 该库可以构建为静态库,包括项目中的 n 个头文件和源文件或导出符号。(它仍然不会保存重建库以用于不同的编译器。)
根据上述内容仔细查看 SDL,我意识到它的链接有两层:在我的 SDL 项目中,我静态链接到 libSDL.a,而 libSDL.a 又将动态链接到 SDL。 dll,从而消除了不同编译器对不同 .dll 版本的需求。
问题是这是否真的是这种情况以及问题的可行解决方案,还是我错过了什么(以及什么)?
file - 在 Installshield 中的动态链接下排除文件夹
有没有办法排除位于 InstallShield 中动态链接下的文件夹?
所以我有一个从 PATH A 开始的动态链接,下面是一个小示例目录结构:
目前我有一个从 PATH A 开始的动态链接,包括子目录,并使用 *.* 通配符和一些明确的文件排除。
我现在要做的是完全排除一个目录,例如从上面的示例目录结构中完全排除 PATH F。
c++ - Windows 上的插入器
是否可以替换系统函数,就像在 Linux 和 Solaris 上使用 LD_PRELOAD 一样
例如通过设置环境变量:LD_PRELOAD=/path/to/mymalloc.so
我将使用我的替换 malloc 函数,而不是在系统库中已经安装的 C 运行时中。系统 dll 中的所有其他功能都将正常运行。
c - 静态和动态链接同一个库
我有一个静态链接到库 ( libA.2.0.a
) 并动态链接到另一个库 ( libB.so
) 的程序。libB.so
还动态链接到旧版本的 libA ( libA.1.0.so
)。
这种配置可行吗?如果是这样,系统如何知道使用来自libA.2.0.a
for 我的程序的符号和来自libA.1.0.so
for的符号libB.so
?
c++ - C++ 全局初始化能有多懒?
我习惯于认为全局/静态类成员的所有初始化都发生在 main() 的第一行之前。但我最近在某处读到该标准允许稍后进行初始化以“协助动态加载模块”。在动态链接时我可以看到这是真的:我不希望在我 dlopen'ed 库之前初始化库中的全局初始化。但是,在一组静态链接在一起的翻译单元(我的应用程序的直接 .o 文件)中,我会发现这种行为非常不直观。这只是在动态链接时才延迟发生还是可以随时发生?(或者我读错了什么?;)
c# - 如何构建一个C#插件框架?
我想为 C# 应用程序实现一个插件框架;这样应用程序在编译时不需要知道所有可用的 .DLL,但可以在运行时动态链接。我希望我需要设置一些预期的参数来将信息传入和传出插件,但我不确定还需要什么或如何在 C# 中进行此操作。您能否指出此实现的模式或我可以实现以实现此目标的框架(如果 API - 需要开源许可证)?
macos - 如何分发带有依赖库的 Mac OS X?
我有一个程序(特别是我的SO DevDays Countdown 应用挑战条目),它依赖于几个动态库,即 libSDL、libSDL_ttf 等。我/opt/local/lib
通过 MacPorts 安装了这些库,很多人不会安装这些库(有些人可能安装了它们,但不是在那个位置)。
如何分发我的程序,以便没有安装这些库的人可以开箱即用地运行它?显然我必须分发各种.dylib
文件,但这样做是不够的。动态加载器仍会查找安装在我安装它们的位置的库。有没有办法告诉动态加载器查看可执行文件的当前目录,就像 Windows 对 DLL 所做的那样?人们不应该修改任何环境变量(例如DYLD_LIBRARY_PATH
),因为我希望它能够开箱即用。