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

c++ - 当库更改时,Exe 执行完整链接,尽管增量链接

我有一个 MSVC++ 项目,包括一个可执行文件、几个自己的静态库和一些预编译的静态第三方库。exe 使用增量链接来加快构建时间。

当我在可执行项目中更改 .cpp 文件时,编译 + 链接非常快(<10 秒)。
但是,当我在自己的一个库中更改 .cpp 文件时,可执行项目似乎正在针对它使用的每个库进行完整链接。
如果它实际上是一个完整链接,我不再那么确定了,但是从“vc90.pdb not found”链接器警告中,我可以看出它链接到了一些根本没有改变的外部库。

以下是项目结构的示例:

  • 预编译的第三方库ExtLib1ExtLib2以及ExtLib3
  • 自有库MyLib,使用第三方库ExtLib1
  • 拥有 Exe MyExe, 使用MyLibExtLib1-3

更改 .cpp 文件MyLib会导致MyExe链接到MyLib、和ExtLib1,即使打开了增量链接也是如此。ExtLib2ExtLib3

在我的项目中,完整链接大约需要 5 分钟,所以我问:有没有办法只重新链接已更改的库?

0 投票
0 回答
163 浏览

c++ - 增量链接对执行速度有什么影响?

我想知道增量链接对程序执行速度的影响。

我知道增量链接会在函数和数据之间添加填充,这会导致更大的可执行文件,并且在某些情况下可能会通过不太优化的缓存使用来加速影响。Microsoft 的文档还指出,它可能会添加跳转 thunk 来处理函数的重定位。但是没有关于速度的消息。

有没有人知道速度影响,甚至做过一些测量?

0 投票
2 回答
2170 浏览

c++ - 使用 NMAKE 时禁用增量链接

我正在尝试使用nmake. 但是当我尝试这个时,我得到以下链接错误。

LINK:致命错误 LNK1123:转换为 COFF 时失败:文件无效或损坏

据我所知,这是由于 .NET 框架版本(我使用的是 .NET 4.5)造成的,当我在 VS2010 中编译 c++ 项目时出现相同的链接错误。为了摆脱它,我按照这篇文章中的建议禁用了增量链接。

但是当我nmake从 VS 命令行运行时,我不知道该怎么做。我必须在配置时提及它还是可以将它作为参数传递给 nmake ?

0 投票
1 回答
441 浏览

i386 - 带有 --incremental 标志的黄金链接器不适用于目标 i386

我正在使用binutils-2.24 中的Gold 链接器来链接目标应用程序: i686-pc-linux-gnu 。

当我在 i686-pc-linux-gnu 机器上运行 Gold 时出现虚拟内存不足错误,所以我在 x86_64-linux-gnu 主机上构建它(以获得更多虚拟内存),然后我正在运行它这台机器也是如此,但我用它来链接我的目标应用程序:i686-pc-linux-gnu。

第一个链接是成功的——我还没有可执行文件——所以 Gold 恢复为 --incremental-full 并且我得到了一个可以在我的 i686-pc-linux-gnu 机器上成功运行的可执行文件:

gold-ld -o stam32 -dynamic-linker /lib/ld-linux.so.2 -L/usr/lib32 /usr/lib32/crti.o /usr/lib32/crtn.o /usr/lib32/crt1.o main.o try.o -lc --incremental

* stam32: stat: 没有这样的文件或目录与--incremental-full 链接*

‎第二个链接失败并出现以下错误:

../objs-binutils-2.24/gold/ld -o stam32 -dynamic-linker /lib/ld-linux.so.2 -L/usr/lib32 /usr/lib32/crti.o /usr/lib32/crtn。 o /usr/lib32/crt1.o main.o try.o -lc --incremental

../objs-binutils-2.24/gold/ld:init_got_plt_for_update 中的内部错误,位于 ../../binutils-2.24/gold/target.h:949

我查看了源代码,发现“init_got_plt_for_update”仅针对 x86_64 和 tilegx 实现。对于其他目标 init_got_plt_for_update 只需调用 gold_unreachable() 即可退出 gold 并出现错误。

另一方面 - 关于 Gold 的增量链接 ( https://video.linux.com/videos/incremental-linking-with-gold ) 有一个完整的讲座,其中特别提到了 i386,作为 Gold 支持的目标,以及演讲者没有提到对 i386 目标使用 --incremental 标志的任何限制(据我所知 i686-pc-linux-gnu 是 i386 目标)。

那么有人知道为什么我的增量链接失败了吗?

提前致谢, Galit Keret

0 投票
1 回答
1759 浏览

visual-studio-2010 - Visual Studio 2010 无法打开 .ilk 文件

我正在尝试在 VS2010 中构建一个 C++ 程序,但遇到了一个我以前从未见过的错误。

链接:致命错误 LNK1104:无法打开文件 C:...\Debug\labfour.ilk

我搜索了解决方案,但找不到任何其他无法打开 .ilk 文件的 Visual Studio 链接器实例。有谁知道为什么会发生这样的事情?我想知道是否有类似于错误的解决方案,cannot find or open the PDB file您必须在解决方案资源管理器属性中调整一些设置。

任何见解将不胜感激,谢谢。

0 投票
1 回答
754 浏览

cmake - MSVC 与 CMake 和 Ninja 生成器的增量链接

我在 Windows 上使用 CMake 和 Ninja 生成器构建了一个共享库。我想使用增量链接来减少链接所需的时间。

我试图设置CMAKE_SHARED_LINKER_FLAGS为,"/incremental"但这个标志总是被"/INCREMENTAL:NO"CMake 附加的 a 覆盖。

我也尝试设置MSVC_INCREMENTAL_DEFAULTON,但这没有任何效果。

那么如何使用 CMake 和 Ninja 生成器进行增量链接呢?

0 投票
1 回答
438 浏览

gcc - 我可以让 CMake 使用 gcc 增量链接生成 Makefile 吗?

我最近意识到gcc 的增量链接功能,我想使用它。问题是,我不编写自己的 Makefile - 我使用 CMake。文件间依赖关系和目标本质上是相同的,但我想让 CMake 尝试使用增量链接而不是从头开始链接来获取它们?

此外,如果即使对于库中的文件也有可能,即当您在文件中重新编译一个.o文件.a时,而不是在链接可执行文件时重新考虑整个文件,.o则仅重新考虑/重新应用其中的单个文件。

为了说明,假设我CMakeLists.txt有:

现在,当a.cpp更改时,我们得到一个编译a.cpp->a.o然后是一个常规链接a.o b.o c.o-> foo。我希望它是a.o foo something_else_maybe -> foo

注意:这个问题与 MSVC 及其自身的增量链接功能无关。

0 投票
1 回答
74 浏览

php - 嗨..我想在我的网站上从linkedin登录

我看过一些教程。他们正在展示有关外部linkedin api的信息。 我在哪里可以下载这个api。

我创建了应用程序并成功登录。 我如何从linkedin 中检索r_basicdatails。我已经在 codeigniter 控制器中重定向回调函数。我可以在控制器函数中放入什么代码来从linkedin获取数据。

当用户点击linkedin登录时。它被重定向到 . 寄存器控制器的linkedin函数。我应该在linkedin函数中输入什么代码。请帮帮我。

0 投票
1 回答
1263 浏览

rust - Rust 缺少增量编译到底意味着什么?

这个问题是在 Rust 正式支持增量编译之前被问到的。Rust 1.24.0及更高版本默认为开发(调试)构建启用增量编译。

我是一个局外人,想看看 Rust 是否适合我的项目。

我读过 Rust 缺乏增量编译(尽管有 beta 功能)。

  1. 这是否类似于在 C++ 的头文件中实现所有内容(就像在Boost的大部分内容中一样)?

  2. 如果以上是正确的,这是否将 Rust 限制在具有小依赖关系的相当小的项目中?(比如说,如果QtKDE是只有头文件的库,那么使用它们的程序开发起来会非常痛苦,因为每次你想编译自己的代码时都会有效地重新编译 Qt/KDE。)

0 投票
0 回答
15 浏览

linker - 是否可以让链接器生成一个二进制文件,尽可能接近先前生成的二进制文件?

这是上下文:我使用微控制器,将生成的二进制文件写入内部闪存,并从那里执行。闪存以 4KiB 块进行擦除和写入。闪光器足够聪明,可以跳过不需要更改的块。

在开发过程中,通常每天进行数十次微小的更改并重新编译和重新刷写。

我想要实现的是,如果可能的话,让链接器尽可能地保留现有结构。例如,如果我在某处删除了一个 if-check,代码会变小几个字节,并且所有后续信息都会移动几个字节,因此整个闪存被擦除并重新编程。

如果链接器能够以某种方式在链接符号之间添加填充,则通常可以跳过闪存的大部分而不覆盖。当代码变大时,这显然不起作用。

是否有任何 gcc 选项可以帮助自动化此类任务(无需手工制作大量链接器脚本)?是否有任何编译器至少部分支持此类行为?