问题标签 [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 回答
381 浏览

loops - CMake:如何打破 PRE_LINK 无限循环?

我正在尝试使用内部版本号自动标记我的应用程序登录行。这个应用程序是一个没有图形 UI 的普通 C 应用程序;它适用于命令行,因此它是一个“简单”的。

登录 ID 位于由 CMake 自定义的“模板”源文件中configure_file()命令自定义的“模板”源文件中。最近,我想在这个登录 ID 中包含一个内部版本号。因此,定制不能再在 CMake 时静态完成,而是每次调用 make。

为了实现这一点,CMake 中有两种可能性:

  1. add_custom_target(),但即使源树中没有其他任何不反映树状态的更改也会触发它;
  2. add_custom_command(),只有在应用程序(目标)需要再次链接时才能触发。

我选择了第二种解决方案,但没有成功。

这是我的CMakeLists.txt的摘录,登录 ID 在文件ErrAux.c中(PROJECT_SOURCE_DIR 中的模板,在 PROJECT_BINARY_DIR 中配置):

这会在链接步骤之前启动脚本BuildNumber.cmake 。它计算下一个内部版本号并使用 自定义ErrAux.cconfigure_file()

它工作正常,除了...

它发生在制作序列的后期,对ErrAux.c的更新被忽视了。可执行文件中的登录 ID 包含以前的内部版本号。

下次我运行make时,make注意到生成的ErrAux.c比它的目标模块更年轻,并导致它再次被编译,这反过来又会导致一个链接触发内部版本号更新。即使没有其他文件发生更改并且此循环无法中断,也会发生这种情况。这在编译日志中清楚地显示:

症结似乎是add_custom_command(TARGET ...)无法指定像这样的输出文件 add_custom_command(OUTPUT ...)。但是后一种形式不能在 PRE_LINK 模式下触发。

作为一种解决方法,我强制编译以“刷新”对象模块:

在登录 ID 自定义后强制进行显式编译。它模仿了各种Makefile中的内容,我对生产不安全。这是CMakemake上的一个作弊技巧的一个作弊技巧。

更新:-c需要选择将链接步骤推迟到最终的应用程序链接过程。

如日志所示,此添加会在链接中造成严重破坏,您可以在其中看到双重编译(标准制作一个和add_custom_command()一个):

如果我强制重新编译,以确保编译所有源代码,包括 *main.c*,我会在 `main` 上得到相同的错误。唯一合乎逻辑的解释是我的手动 C 调用是错误的,并且以某种方式破坏了重要信息。我用 *readelf* 检查了 `main` 仍然在 *main.co* 的符号表中,并且它仍然被链接步骤(来自文件 *link.txt*)考虑在内。

更新:即使有正确的链接,我仍然遇到无限循环综合症。生成的应用程序的登录 ID 仍然落后于实际的构建计数器。

有人可以给我一个正确方向的线索吗?

仅供参考,我对 CMake 很陌生,所以我可能会做错事。不要犹豫,批评我的错误。

0 投票
1 回答
150 浏览

gstreamer - prelink-rtld:找不到命令

尝试使用 yocto 构建我的项目时,出现 Prelink-rtld: command not found 错误。 完全错误

尝试添加 DEPENDS += "prelink"

但这并没有解决问题。

在启用 gcc-sanitizer 后开始出现此错误。IE

在 gstreamer1.0_1.12.2.bbappend 文件中。

0 投票
1 回答
45 浏览

linux - patchelf 是否修改 lib 的部分偏移量?

我正在尝试检查以下问题

mylib.so 没有 SONAME。

所以,我通过使用以下命令的 patchelf 添加了 SONAME

我使用 readelf -a 检查了精灵信息

接下来,我使用“预链接”来减少启动时间。

但以下日志发生错误

也许...我认为 patchelf 对 mylib 的 elf 信息、结构有影响

patchelf 是否修改 lib 部分偏移量?

我想知道 patchelf 如何影响精灵信息。

+) readelf 输出比较左边是 patchelf 未应用输出,另一个是哪个 patchelf 应用。

在此处输入图像描述