问题标签 [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.
c++ - C++ 从 void* 转换为 SomeClass*
我正在开发一个 C++ 库,该库将作为插件在 C++ 和 C 程序中动态加载(dlopen、dlsym ...)。
C++ 程序将使用库中的创建者和析构函数来分别调用构造函数和析构函数。像这样的东西:
问题是:它不是那种类型安全的。可以在这里输入安全吗?( static_cast
, dynamic_cast
, reinterpret_cast
...)
这很重要,因为我打算为每个 MyClass 方法创建一个 C 包装器。这将允许我将此库加载到 C 程序中(类似于可以与 C 风格或 C++ 风格一起使用的 DBus C 移植)。所以我会做这样的事情:
请记住,这只是一个虚拟示例。
非常感谢。
c++ - 静态库 & 动态库 - 更多 C++ 乐趣
假设我想创建一个动态库dynamic.so
,但我的代码引用了一个存在于其他静态库中的函数static.a
。自然地,如果我编译并使用g++
和-shared
选项链接,dynamic.so
将期望引用的函数在其他一些动态库中实现,我必须在运行时将其与dynamic.so
. 换句话说,只要我这样做就会很高兴-l static
(模数语法)。
但是由于那个其他库实际上是一个静态库,所以我不能这样做。假设我也无法在主程序的编译时链接静态库,但我被迫只使用动态库。所以我真正想要的是从static.a
in 中包含引用函数的编译代码dynamic.so
。
这个对相关问题的回答建议使用--whole-archive
包含static.a
在dynamic.so
. 但是,就我而言,static.a
是巨大的。而且我真的不需要全部,我只需要一个函数定义。
This answer to another question解释了在编译时链接到静态库意味着只有实际引用的代码才会包含在二进制文件中。好吧,这正是我想要为我的单个函数参考做的!我真的不想要整个静态档案在那里。
但我怎样才能做到这一点?如何仅包含static.a
in的必需部分dynamic.so
?
macos - 将 Mac 二进制文件加载为动态库
我正在使用没有源的二进制可执行文件进行一些逆向工程。在 Windows 上,我可以做的是使用 LoadLibrary 加载一个可执行文件 (EXE),就像它是一个 DLL 文件一样。如果加载的文件不可重定位,我可以简单地将我的加载器代码重定位为其他模块“腾出空间”。当我加载二进制文件时,我可以调用它的函数(当然,假设我在哪里),并做其他事情。
有没有办法在 Mac 上做同样或类似的事情?我有一个 mach-o 可执行文件,我想加载它,因为它是一个动态库 (DYLIB)。或者有什么方法可以将可执行文件转换为 DYLIB?可执行文件和 DYLIB 之间的真正区别是什么?
gcc - Linux GNU Build:从一组静态库构建动态库
我有一个刚刚完成的 make 系统,我的目标是最后有一个 Monalithic .so 文件。到目前为止,我已将所有单独的部分编译成 .a 文件。我这样做只是为了压缩我必须使用的 .o 文件的数量。
到目前为止,我的想法是在最后解压缩 .a 文件,然后将它们全部重新构建到大的 .so 文件中。这是 sincable 还是有另一种(更好的)方法可以做到这一点?
g++ - Eclipse 同时使用静态和动态链接库管理 make
我正在使用 Eclipse CDT 的托管 make 功能。使用仅动态库创建项目按预期工作。但是 boost_unit_test_framework 应该是静态链接的,因为它包含 main 函数。在命令行上混合链接到动态和静态库不是问题。所以这是一个工作示例:
dynlib 和 libc 等标准库是动态链接的,而 boost_unit_test_framework 是静态链接的。但是我如何在项目的设置中输入这些信息?我看不到任何方法。
可以在每个项目中标记此库以进行静态链接,例如在全局位置。QNX([手册])使用了约定。可以使用 LIBPREF_library 和 LIBPOST_library 在指定库之前或之后添加选项。
更新: 我仍然不知道如何解决所描述的问题。但与此同时,我已将构建系统从 Managed Make 切换到 CMake。此外,我现在正在使用 Qt Creator,因为它能够索引提升并且在更新一些内部结构时不会冻结 UI ...
[手册] http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/prog/make_convent.html#USEMAC
gcc - 使用 gcc --shared -m64 -Wl,--whole-archive ./*.a 从静态库制作动态库
我收到了这组 gcc 错误,我似乎无法从谷歌或手册页中得到答案。关于这些意味着什么或从哪里开始寻找的任何见解?
这是makefile中的行:
我收到以下错误(还有很多我拿了前 n 只是为了给出一个想法:
更新
我试图结合的静态库是:
我对每个文件进行了单独编译,因此没有执行链接。我查看了源代码,没有看到任何涉及 libgcc 的内容。这就是为什么这个错误对我来说不是。
c++ - “C++ dlopen mini HOWTO”是编译动态加载的 C++ 插件库的推荐技术吗?
通过插件。
我们的意思是一个加载 vi 的库,dlopen()
它的符号通过dlsym()
(不是由运行时系统动态加载的标准分片库)解析。
参考http://www.isotton.com/howtos/C++-dlopen-mini-HOWTO/。该文档最后一次更新是在 2006 年。它建议使用extern "C"
来防止函数名称的混淆,以便dlsym
可以相对轻松地找到它的函数。
这仍然与动态库相关吗?在我的特殊情况下,我正在尝试使用 libtool 在 OSX 上创建一个动态库。也许使用__attribute__ ((constructor))
更时髦和现代,我发现推荐的做法几乎没有成功。
c++ - 在 C++ 名称修改错误中使用静态库的动态库
我正在尝试沿 mongoDB c++ 驱动程序创建一个动态(.so)包装库。编译没有问题,但是当我在 C++ 示例程序中对其进行测试时,我得到了错误
我认为这与名称修改问题有关。
我将库编译为
这是我用于测试的程序:
头文件 mongoquery.hpp 包含
谢谢
c# - .net 如何明智地使用 .dll?
在我当前的 .net 项目中,我使用了各种 .dlls 文件,有些是外部编写的,有些是我创建的。现在我问自己,在不同的解决方案和项目上处理不同的 .dll 文件并让它们与 SVN 一起工作以便它们可以在不同的开发人员之间使用的最佳实践是什么。
好的,所以我在问一些一般提示:
我应该通过源将 .dll 项目绑定到不同的解决方案中,还是直接通过它的 release.dll 绑定?
如何防止人们通过 SVN 获取文件以重新绑定 dll 源(全局程序集问题等)
使用尽可能多的 .dll(按功能划分)或使用一个大的 .dll 以获得更简单的概述是好的吗?
请不要太难,我是这个行业的初学者,英语不是我的母语。
提前谢谢你,哈利。
c++ - 用于构建用 C++ (Linux) 开发的动态库的模板 Makefile
我正在寻找一个好的 Makefile 模板,用于在 Linux 上创建动态可加载库。动态库是用 C++ 开发的。我只想在 Makefile 中指定库名称及其源文件 (.cc)。此外,我希望能够为构建过程指定一个目录(例如 ./build)。构建后,动态库应该在另一个目录中(例如 ./libs),在 Makefile 中也被指定为变量。
有什么提示吗?
提前致谢并致以最诚挚的问候!乔纳斯