问题标签 [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 投票
2 回答
11635 浏览

xcode - 如何使用 Xcode 调试 dylib?

我有一个用于库 arith 的 Xcode 项目。我可以用调试配置构建它,我需要调试它。我怎样才能做到这一点?

理想的方法是设置测试代码以在项目文件中构建执行,然后在 arith 库的源代码中设置断点。

但是,似乎 Xcode arith 项目不允许添加另一个使用 arith 库的 use_arith 项目。

人们使用什么方法在 Xcode 中调试动态库?

添加

我用谷歌搜索并找到了一些调试 dll 的方法。附加到正在运行的进程可能是调试动态库的一种方式。并且,对于 iPhone/iPad 编程动态库是不允许的,所以使用静态库。

  1. 附加到正在运行的进程 - http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Attaching-to-a-Running-Process.html

  2. 使用 Xcode调试库 - 使用 Xcode 调试库

  3. 跨 iPhone 应用程序轻松、模块化的代码共享:静态库和跨项目引用 - http://www.clintharris.net/2009/iphone-app-shared-libraries/

0 投票
4 回答
5160 浏览

linux - 在 linux 中为所有 x86 机器创建通用二进制文件

我试图编译一个开源项目的二进制文件,这样我们的用户就不必自己编译它。

我注意到在一台 32 位 ubuntu 机器“A”上创建的一些二进制文件在 32 位机器“B”上不起作用,并且报告了有关丢失 .so 文件的错误。

但是,如果我在机器“B”上从头开始编译,那么所有错误都消失了。

为什么在目标机器上编译代码会使这些错误消失?我只运行了“./configure”和“make”——而不是“make-install”,所以它不像我让这些 .so 文件在全球范围内可用。

是不是编译器检测到系统库中缺少 .so 文件,在这种情况下将静态库链接到可执行文件?

Ubuntu 如何编译它的包以便 i386 包在所有 x86 机器上运行?

0 投票
1 回答
3119 浏览

c++ - 在 Openmp (C++) 中销毁线程

是否可以销毁 OpenMP 创建的线程?程序启动时,只有一个线程。在并行化部分之后,由于存在线程池,因此保留了多个线程。并行部分运行后有什么方法可以销毁这个池?

我问是因为我在动态库中使用 OpenMP,并且在线程运行时无法关闭库句柄(程序将出现段错误)。

谢谢

更多解释: 我将所有并行化代码放入模块(共享库)中。然后我加载模块并将一个派生自抽象基类的类传递给它。然后该模块并行“运行”该类。这样,我可以不使用并行化、OpenMP、MPI 或其他任何东西,并且可以在运行时甚至动态更改并行方案。但是 OpenMP 不会破坏线程,当需要手动 dlclose 库时,它会出现段错误,因为资源是从线程下面被破坏的(我相信)。让程序在不关闭库的情况下完成现在可能还可以,但是将来可能仍然会出现手动关闭库的想法(考虑即时更改方案)。希望这是有道理的:)谢谢

0 投票
3 回答
2862 浏览

c++ - 使用共享库代替静态库会影响内存使用吗?

我正在链接 10 个静态库。

当我使用动态库时,我的二进制文件大小正在减少。

据我所知,使用动态库不会减少内存使用量。

但是我的前辈告诉我,使用共享库也会减少内存使用吗?(当多个进程为相同的可执行代码运行时。)

这种说法对吗?

他告诉我,由于库中使用的函数没有重复副本,因此内存使用量会更少。当您创建该进程的 n 个实例时。

当进程开始时,它的 fork 是 10 个孩子。那么使用动态库代替静态库会减少总内存使用吗?

0 投票
20 回答
464213 浏览

php - PHP 警告:PHP 启动:无法加载动态库

我运行 PHP 脚本并收到此错误:

PHP 警告:PHP 启动:无法加载动态库 '/usr/local/lib/php/extensions/no-debug-non-zts-20090626/ixed.5.2.lin' - /usr/local/lib/php/extensions /no-debug-non-zts-20090626/ixed.5.2.lin:无法打开共享对象文件:在第 0 行的未知中没有此类文件或目录

这意味着什么?

0 投票
0 回答
368 浏览

xcode - XCode/gdb 在调试 iOS 上对动态库函数的调用时丢失堆栈

我有一个 iOS 项目,它链接到用 C++ 编写的外部静态库。静态库调用由动态链接的 libstdc++ 实现的函数。例如,我调用这个库的初始化函数(我们称之为foo_init()),它立即调用setlocale().

静态库是用 -g 编译的,这意味着调试符号就在我身边,我可以在调试器中单步执行代码。我成功踏入foo_init()。当我尝试跳过对 的调用时setlocale(),XCode 并没有完全做到这一点。它最终出现在一个名为dyld_stub_setlocale. jmp此函数是执行动态加载和函数调用的单个指令。

我尝试过 Stepping Over/In/Out ofdyld_stub_setlocale但他们没有让我到达我想要的地方,即回到foo_init(). Step Over 和 Step In 最终进入stub_helpers, Step Out 就像 continue 一样。如果我尝试 Step Over/In inside stub_helpers,XCode 单步和堆栈窗口显示foo_init()更改为??. 在这一点上,用于步进/退出的决策树会爆炸,所以我不会详细介绍,但我尝试过的任何组合都不会在调用setlocale.

我可以为该行设置一个断点,点击继续,让它工作,但这不是用于调试我不太熟悉的静态库的可扩展解决方案。

请注意,我试图找到一种方法来链接 libstdc++-static,这样我就可以避免动态加载程序问题,但是 Apple 已从较新的 SDK 中删除了该库,而我没有较旧的 SDK。

是否有链接器或编译器选项可以使调试器更容易破译代码?

0 投票
2 回答
6215 浏览

linux - LD_LIBRARY_PATH 优先级

我刚刚偶然发现了一些奇怪的行为:在我启动我的应用程序之前,我已经将 LD_LIBRARY_PATH 设置为一些包含所有需要的库的本地库目录。启动后,我从 LD_LIBRARY_PATH 加载了部分(大部分)库,但从标准 /usr/lib 加载了一些库(例如 /usr/lib/libQtNetwork.so.4、/usr/lib/libSM.so。 6)。所有这些库都包含在 LD_LIBRARY_PATH 中列出的目录中。谁能解释我为什么会有这样的行为?我对 Linux 世界不是很熟悉,但这篇文章说我的方法应该可行

PS 如果我将 /usr/libs 重命名为其他名称,我的应用程序将使用从我的库位置使用的所有库运行

预先感谢!

0 投票
1 回答
57 浏览

linker - 当动态库在磁盘上更新时,Linux 会发生什么

当加载动态库并在磁盘上更新,然后启动链接到该库的新进程时,Linux 会发生什么?新进程是与内存中的旧副本还是磁盘上的新版本相关联?

0 投票
1 回答
2009 浏览

c++ - 动态库使用静态库,出现未定义符号

我一直在寻找解决问题的方法,只是得到了一些线索,但我找不到任何一致的解决方案:我有一个动态库 (libdyna.so) 的代码,它使用 3 个静态库 (libone.so) 的功能。 a、libtwo.a、libthree.a) 和 log4cpp 库。当我第一次构建它时一切看起来都很好,我可以制作'libdyna.so',但是当你用我的java测试程序通过一个包装器(jni包装器工作正常)测试它时,我得到了很多未定义的引用。

然后我将“-z defs”标志放到make文件中,出现了很多未定义的引用,我无法再次编译动态库。

我用三个静态库创建了“nm”命令,它正确导出了我在动态库中使用的所有函数。但是当我在包含 3 个静态库的“libdyna.so”上创建 nm 时,我发现了未定义的符号(函数)。

我认为解决方案必须类似于在我想制作动态链接器时向链接器添加一些标志,但我真的不知道。谁能帮助我,或者告诉我一些想法?如果需要一些代码,请告诉我,我会在这里粘贴。非常感谢。

P/D:对不起我的英语不好。

0 投票
2 回答
9514 浏览

python - Python ctypes返回值问题

为什么如果我有这个简单的代码

我将它编译为动态库

我使用 ctypes 从 python 解释器调用函数

为什么从void方法返回的值是17而不是None或相似?谢谢你。