问题标签 [prelink]

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 投票
1 回答
575 浏览

linux - 预链接错误:布局错误:节大小对于数据来说太小

我正在使用 Linux 2.6.35 的 ARM 系统上运行 prelink。我正在使用 Glibc 2.12.2。我想预先链接我的库和应用程序可执行文件。但是,我似乎无法链接直接依赖 glibc 的任何内容。当 prelink 尝试在 上运行时/lib,它会出错:

有没有办法让我解决这个问题,或者说服 prelink 预先链接除驻留内容之外的所有内容/lib?我知道 中的黑名单功能/etc/prelink.conf,但随后 prelink 将出错,因为它找不到位于该目录中的依赖项。

编辑:

这是我的 prelink.conf

我在飞思卡尔的 i.MX51 平台上。它是 ARM Cortex-8。由于我已经使用我们的开发工具包附带的 GCC/G++ 版本编译了所有内容,因此我假设 ELF 二进制文件是 32 位的。

编辑:

我将 -h 标志更改为 -l 并将系统库移动到列表的前面。我仍然得到同样的错误。

我在设备上运行预链接,而不是在我的交叉构建机器上。

LD_LIBRARY_PATH 包含 /lib 和 /usr/lib

尝试将 prelink 运行为: prelink -a prelink -amR

并以两种方式得到相同的结果。

我正在运行 gcc 4.4.6 交叉编译器。我正在运行 ld 1.12.1 ld。

0 投票
1 回答
2728 浏览

android - ELF Android 系统库中 .rel.dyn 部分的用途

我正在尝试处理.rel.plt某些 Android 系统库的部分,我可以很容易地找到函数的地址。

但是,我不确定该.rel.dyn部分的条目是什么。本节是否也包含功能?.got.pltARM Android 库中缺少 X86 库中的表。不确定是否也需要这些。

android 链接器代码提到系统库是预先链接并加载到固定地址的。这对处理.rel.plt.rel.dyn部分有何影响。

更广泛的问题是围绕了解基于 Android ARM 的系统库和.rel.dyn,rel.plt以及.got.plt添加了预链接问题的部分。

0 投票
1 回答
349 浏览

angularjs - 如果指令使用 templateUrl 而不是模板,则不会调用角度预链接

在 angular.js 的 compileTemplateUrl 函数中。derivedSyncDirective 的“控制器:null”导致没有为该元素存储控制器函数。所以在nodeLinkFn(它的prelink部分)中调用的getControllers会抛出异常,所以不会调用prelink。请参阅http://plnkr.co/edit/yMcurPowZmxCOv0luE5s 我不明白为什么这里是“控制器:null”。有人知道吗?

0 投票
1 回答
156 浏览

gcc - 共享库中的地址分配

我正在尝试了解共享库。据我所知,共享库的基地址为零,因此它们可以在运行时加载到任何地址,因此变量在运行时或加载时被正确重定位。因此,在加载库之前,所有符号都被赋予了与库基数的一些偏移量。因此,我尝试调查一些现有的库并创建了一个库。但我发现了一些不同之处。对于 libc.so,我发现是这样的:

据我所知,精灵标题占用了一些空间。但即使是这样,它也不会占用从 0 到 0x3b47a00270 的地址。所以,我创建了自己的库(使用 -fPIC 和 -shared 标志),我看到了这个:

就地址而言,这似乎更合理。.note.gnu.build-id 这里从 0x1c8 开始。那么,伙计们有什么想法,为什么在 libc 或其他现有库(如 libpthread)的情况下,情况会有所不同?我正在使用 Fedora 18 x86_64。我认为这可能是预链接的情况,但我不确定,即使它是如何找到它是预链接的?非常感谢提前...

0 投票
1 回答
123 浏览

javascript - DOM中的元素是不是在调用链接函数的时候?

我有一个指令,它返回带有 templateUrl 和链接属性的 DDO。我的 templateUrl 在 div 上包含 ngRepeat 指令,其中包含复选框元素。在我的链接函数中,我试图选择所有子复选框,但在调用我的链接函数时它们没有添加到 DOM 中。如果我将我的选择包装在 $timeout 中,当然会选中复选框。根据文档,Angular 按以下顺序调用函数:

mainDirective->compile->preLink->firstChildDirective->compile->preLink->lastChildDirective->compile->preLink->postLink->firstChildDirective->postLink->mainDirective->postLink。

根据 Angular 文档,如果您返回带有链接属性的 DDO,它被称为 postLink,在我看来,这意味着所有子复选框都应该已经在 DOM 中,但事实并非如此。

通过查看角度代码,我可以看到当你有编译函数但没有 templateUrl 时就是这种情况:

此外,如果有链接属性,并且 templateUrl 的directive.compile 被分配了directive.link。

我清楚地可以看到 addLinkFns(null, linkFn) 在没有 templateUrl 时将链接函数绑定到 postLink 但是当你有带有一些子指令的 templateUrl 时会发生什么。为什么在调用链接功能时子复选框不可用?谢谢您的帮助!!!

0 投票
4 回答
988 浏览

visual-studio - 确定它是在 Visual Studio 中的预链接步骤中调用的 .cmd 脚本中的构建还是重建

如何.cmd在 Visual Studio(分别为 2005、2008、2010、2012 和 2013)项目的预链接阶段中运行脚本来确定这是完全重建(Build.RebuildSolution/ Build.RebuildOnlyProject)还是“普通”构建(Build.BuildSolution/ Build.BuildOnlyProject)?

这是一个外部脚本(LuaJIT,如果你必须知道的话),我不想在项目的每个构建中都重新构建库。相反,我想将完全重建限制在我完全选择该选项的情况下。

0 投票
2 回答
996 浏览

linux - 预链接仅对相对重定位有影响

我正在使用交叉预链接来预链接将 Qt 用于嵌入式 ARM 设备的大型 C++ 可执行文件。请注意,我使用的不是Yocto,而是自定义发行版 - 所以我目前正在手动运行预链接。

查看 prelink 的输出,它似乎有效:

当库被加载时,至少 libQt5Qml.so 和 libproductcommon.so 似乎被加载到预链接设置的首选加载地址:

现在,我预计搬迁数量会有所减少:

这表明由于预链接,只有相对 重定位减少了,而正常重定位(可能需要符号查找)没有减少。我对减少其他搬迁特别感兴趣,因为那些可能是更昂贵的搬迁。

现在我的问题:

  1. 预链接甚至能够减少正常的重定位吗?一篇LWN 文章在预链接后显示了 0 次正常重定位,所以我认为这是可能的。
  2. 我可能做错了什么,因此非相对重定位不会为我预先链接?我应该从哪里开始调试?
0 投票
0 回答
254 浏览

python - 预链接:没有 .gnu.prelink_undo 部分并且无法打开 ELF 文件:pyintsller 中没有错误

我有带有 LD_LIBRARY_PATH 的 pyinstaller 脚本,其中系统中有以下二进制文件。

  • libldap_r-2.4.so.2

  • libpq.so.5

  • libpython2.7.so.1.0

我正在运行如下代码:

python pyinstaller.py my_script

预链接 -u lib*

执行预链接后,我收到如下错误:

预链接:无法打开 ELF 文件:没有错误

预链接:libldap_r-2.4.so.2 没有 .gnu.prelink_undo 部分

预链接:libpq.so.5 没有 .gnu.prelink_undo 部分

预链接:libpython2.7.so.1.0 没有 .gnu.prelink_undo 部分

有人可以帮我解决这个问题吗?

0 投票
2 回答
1036 浏览

c++ - 预链接错误:预链接交叉:简单的 hello world 示例

我正在尝试交叉预链接一个简单的 hello world 程序。我使用交叉编译工具链arm-2012.03-57-arm-none-linux-gnueabi-i686-pc-linux-gnu,我不确定我是否使用了 prelink-cross 选项正确。如果有人能指出我正确的方向,我会很高兴。有关github上的源代码的更多详细信息。谢谢你。

项目目录树

主文件

prelink_arm.conf

编译

预链接

错误信息

如果我将可执行文件所依赖的所有库提取到一个单独的文件夹中并相应地设置链接,那么我仍然会收到以下错误:

0 投票
1 回答
64 浏览

javascript - AngularJS 值更改在指令中不可见

我想延迟编译子指令,直到父指令的预链接中的承诺得到解决并且值(CONFIG)将被覆盖。

家长的预链接中:

模板包含Child指令,因此 Child 的预链接在 Promise 的解析后执行。现在我想访问Child 的预链接中的 CONFIG ,它具有旧值 ({})。

为什么会这样?小提琴:http: //jsfiddle.net/RmDuw/642/