问题标签 [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.
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。
android - ELF Android 系统库中 .rel.dyn 部分的用途
我正在尝试处理.rel.plt
某些 Android 系统库的部分,我可以很容易地找到函数的地址。
但是,我不确定该.rel.dyn
部分的条目是什么。本节是否也包含功能?.got.plt
ARM Android 库中缺少 X86 库中的表。不确定是否也需要这些。
android 链接器代码提到系统库是预先链接并加载到固定地址的。这对处理.rel.plt
和.rel.dyn
部分有何影响。
更广泛的问题是围绕了解基于 Android ARM 的系统库和.rel.dyn
,rel.plt
以及.got.plt
添加了预链接问题的部分。
angularjs - 如果指令使用 templateUrl 而不是模板,则不会调用角度预链接
在 angular.js 的 compileTemplateUrl 函数中。derivedSyncDirective 的“控制器:null”导致没有为该元素存储控制器函数。所以在nodeLinkFn(它的prelink部分)中调用的getControllers会抛出异常,所以不会调用prelink。请参阅http://plnkr.co/edit/yMcurPowZmxCOv0luE5s 我不明白为什么这里是“控制器:null”。有人知道吗?
gcc - 共享库中的地址分配
我正在尝试了解共享库。据我所知,共享库的基地址为零,因此它们可以在运行时加载到任何地址,因此变量在运行时或加载时被正确重定位。因此,在加载库之前,所有符号都被赋予了与库基数的一些偏移量。因此,我尝试调查一些现有的库并创建了一个库。但我发现了一些不同之处。对于 libc.so,我发现是这样的:
据我所知,精灵标题占用了一些空间。但即使是这样,它也不会占用从 0 到 0x3b47a00270 的地址。所以,我创建了自己的库(使用 -fPIC 和 -shared 标志),我看到了这个:
就地址而言,这似乎更合理。.note.gnu.build-id 这里从 0x1c8 开始。那么,伙计们有什么想法,为什么在 libc 或其他现有库(如 libpthread)的情况下,情况会有所不同?我正在使用 Fedora 18 x86_64。我认为这可能是预链接的情况,但我不确定,即使它是如何找到它是预链接的?非常感谢提前...
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 时会发生什么。为什么在调用链接功能时子复选框不可用?谢谢您的帮助!!!
visual-studio - 确定它是在 Visual Studio 中的预链接步骤中调用的 .cmd 脚本中的构建还是重建
如何.cmd
在 Visual Studio(分别为 2005、2008、2010、2012 和 2013)项目的预链接阶段中运行脚本来确定这是完全重建(Build.RebuildSolution
/ Build.RebuildOnlyProject
)还是“普通”构建(Build.BuildSolution
/ Build.BuildOnlyProject
)?
这是一个外部脚本(LuaJIT,如果你必须知道的话),我不想在项目的每个构建中都重新构建库。相反,我想将完全重建限制在我完全选择该选项的情况下。
linux - 预链接仅对相对重定位有影响
我正在使用交叉预链接来预链接将 Qt 用于嵌入式 ARM 设备的大型 C++ 可执行文件。请注意,我使用的不是Yocto,而是自定义发行版 - 所以我目前正在手动运行预链接。
查看 prelink 的输出,它似乎有效:
当库被加载时,至少 libQt5Qml.so 和 libproductcommon.so 似乎被加载到预链接设置的首选加载地址:
现在,我预计搬迁数量会有所减少:
这表明由于预链接,只有相对 重定位减少了,而正常重定位(可能需要符号查找)没有减少。我对减少其他搬迁特别感兴趣,因为那些可能是更昂贵的搬迁。
现在我的问题:
- 预链接甚至能够减少正常的重定位吗?一篇LWN 文章在预链接后显示了 0 次正常重定位,所以我认为这是可能的。
- 我可能做错了什么,因此非相对重定位不会为我预先链接?我应该从哪里开始调试?
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 部分
有人可以帮我解决这个问题吗?
javascript - AngularJS 值更改在指令中不可见
我想延迟编译子指令,直到父指令的预链接中的承诺得到解决并且值(CONFIG)将被覆盖。
在家长的预链接中:
模板包含Child指令,因此 Child 的预链接在 Promise 的解析后执行。现在我想访问Child 的预链接中的 CONFIG ,它具有旧值 ({})。
为什么会这样?小提琴:http: //jsfiddle.net/RmDuw/642/