问题标签 [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.

0 投票
2 回答
48 浏览

c++ - 正在寻找无效动态库的应用

替代文字 http://img63.imageshack.us/img63/5726/screenshot20100125at124.png

对于我正在开发的应用程序,我不断收到多个错误窗口,要求._libpal_bullet.dll实际上应该只是libpal_bullet.dll。奇怪的是,在我收到所有错误消息后,应用程序仍然使用同一目录中存在的正确 dll 运行。

我怎样才能摆脱这些错误?

0 投票
3 回答
2739 浏览

qt - 在 OS X 和 linux 上部署 QT 应用程序

部署 QT 应用程序的最佳方式是什么?我已经阅读了 trolltech 托管的文档,但是与静态库或动态库链接并让用户安装框架更好吗?我真的不希望任何使用我的应用程序的人都必须下载一个 160mb 的框架来运行一个简单的 gui 前端。

0 投票
1 回答
74 浏览

c - 进行(动态)链接所需的最少信息量?

这是我反复遇到的一个问题,通常与插件有关,但最近我遇到了它,试图解决一些构建系统问题。我关心的主要是基于 *nix 的系统,但我想它也适用于 Windows。

问题是,进行动态链接所需的最少信息量是多少?我知道像Debian这样的Linux发行版只有一个'i686',这就足够了。但是,我想这里有一些隐含的信息,我可能无法对任何共享对象进行动态链接,只要它们是使用 编译的-march=i686,对吗?

那么我必须正确匹配什么才能成功加载共享对象?我知道对于 c++,甚至编译器(有时是版本)由于名称修改而必须匹配,但我有点希望 c 不是这种情况。

任何想法表示赞赏。

编辑
尼尔的回答让我意识到我并不是真的在谈论动态链接,或者更确切地说,这个问题是双重的,

  1. 静态链接需要什么,以及
  2. 动态链接需要什么

我猜我对第一个抱有更高的希望。

0 投票
1 回答
1410 浏览

gdb - QT4 GDB 调试器未链接到 Ubuntu 上的共享库

我是 UNIX 和 QT4 的新手,但 ubuntu 即将到来。我的第一个 QT4 项目将一个简单的测试应用程序链接到移植代码的共享 dll。我能够使用 QT Creator 构建应用程序并从终端运行它。但是嵌入式 GDB 调试器报告:无法加载共享...没有这样的文件或目录。

.pro 文件包含 LIBS += /home/aurel/VISUALAGEPORTS/libVISUALAGEPORTS.so.1.0.0 行

我能够恢复到可以运行的备份版本。但是,我第一次尝试调试恢复的版本时遇到了同样的错误。第二次尝试神秘地没有任何变化。

有谁知道为什么 QT Creator 会正确链接并生成从终端运行而不是从嵌入式调试器运行的可执行文件?

感谢您的任何想法

0 投票
2 回答
2086 浏览

c++ - 符号绑定如何在 linux 中对共享库起作用

使用 g++ -O0 编译 cpp 程序时,我注意到我的二进制文件不包含空字符串 (basic_string) 的符号:_S_empty_rep_storage 当我使用 -O2 编译同一程序时,我注意到上述符号确实包含在二进制文件中如下(在 bin 上使用 nm):

00000000006029a0 V _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4

我的应用程序使用了几个 .so (动态库),当我的应用程序加载时,我注意到其中几个 .so 文件绑定如下(我设置 LD_DEBUG=all 并运行我的程序):

但我也注意到我的 .so 之一只绑定如下:

但从不绑定到上面显示的 mydynamiclib.so 的二进制文件 (mytestapplication)。

所以我想知道这实际上意味着什么?这是否意味着 anotherdynamiclib.so 将为上面的空字符串使用与应用程序的其余部分不同的符号?我想我真正要问的是符号绑定在上面示例的上下文中是如何工作的?

谢谢!

0 投票
2 回答
44873 浏览

c++ - 强制 GCC 通知共享库中未定义的引用

我有一个与另一个(第三方)共享库链接的共享库。然后在我的应用程序中使用 dlopen 加载我的共享库。所有这些工作正常(假设文件在正确的路径等)。

现在,问题是当我链接我的库时,我什至不需要指定链接到第三方共享库。GCC 接受它而不报告关于未定义引用的错误。所以,问题;如何强制 GCC 通知我未定义的引用

如果我将我的库更改为(临时)可执行文件,我会得到未定义的引用(当没有将库提供给链接器时)。(如果我指定它可以正常工作。)

即,完成以下操作:

第二行没有给出错误,第三行抱怨未定义的引用。

示例代码:

啊:

一个.cpp:

:

b.cpp:

0 投票
4 回答
2508 浏览

c++ - 我可以捕获与未找到的 .DLL 文件有关的异常吗

我有一个包含 .LIB 和 .DLL 文件的第 3 方组件。为了使用该组件,我将 .LIB 链接到我的 C++ 程序中,并将 .DLL 与应用程序一起分发。提供的功能非常具体,仅与我的一小部分用户相关,但分发 .DLL 会产生许可费。

这里的一种解决方法是拥有我的应用程序的两个版本,一个链接到第 3 方组件,另一个不链接,但我宁愿避免维护和分发第二个构建所涉及的额外时间。

理想情况下,我想简单地从分发中排除 .DLL,但如果这样做,我会收到错误消息“此应用程序无法启动,因为找不到 XXXXX.DLL。重新安装应用程序可能会解决此问题'。这是我可以在代码中捕获和处理的异常吗?或者,我可以延迟 .DLL 的加载,直到尝试调用所提供的特定功能,然后处理它,或者只是检查 .DLL 的存在并采取相应措施?

环境是VS 2003和VS 2008。

0 投票
2 回答
3004 浏览

g++ - 忽略 LD_LIBRARY_PATH 并坚持在链接时通过 -rpath 给出的库

我坐在一个我无法真正控制的环境中(不仅仅是我,所以基本上,我无法改变环境,否则它对其他人不起作用),我唯一能影响的就是如何二进制文件已构建。

我的问题是,环境指定了一个 LD_LIBRARY_PATH 包含一个与正在使用的编译器不兼容的 libstdc++。我尝试静态编译它,但这对于 g++ 似乎是不可能的(版本 4.2.3,似乎已经在以后的版本中朝这个方向完成了工作,尽管这些版本不可用,-static-libstdc++ 或类似的东西)。

现在我已经开始使用 rpath 将绝对路径名烘焙到可执行文件中(可行,它应该运行的所有机器都是相同的)。不幸的是,LD_LIBRARY_PATH 似乎优先于 rpath(重置 LD_LIBRARY_PATH 确认它能够找到库,但如上所述,将为每个人设置 LD_LIBRARY_PATH,我无法更改)。

有什么方法可以让 rpath 优先于 LD_LIBRARY_PATH,或者我的问题还有其他可能的解决方案吗?请注意,我说的是运行时的动态链接,我能够在编译和链接时控制命令行。

谢谢。

0 投票
1 回答
109 浏览

c++ - OS X 上的哪些动态库可以被视为理所当然?

如果我想让一个 OS X 程序尽可能独立以简化安装,我希望每个人或大多数人都拥有哪些动态库?如果我知道这一点,我就不必为所有东西编译静态库。

0 投票
3 回答
7152 浏览

qt - 如何设置 Qt 应用程序在哪里找到 Qt 模块?

我想将 libQtGui.so.4 libQtNetwork.so.4 和 libQtCore.so.4 包含在与我的应用程序所在的目录相同的目录中。我如何让 Qt 理解这一点?y 目的是拥有一个使用共享库的独立应用程序