我看过微软的MSDN和网络上的所有内容,但我仍然无法真正了解它是什么.
这是否意味着已完成的程序在执行期间的不同时间加载DLL,因为它们在启动时立即被应用于所有DLL?
我完全离开了吗?:)
我的团队项目的开发方式,我们从我们所有的.o目标文件为我们的应用程序生成一个共享对象库.我的任务(希望它足够具体,但也足够通用以供其他人使用!)是仅链接自上次创建可执行文件以来已更改的目标文件.例如,这是我用来构建.so的命令行:
g++34 -shared -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject2.o MyObject3.o MyObject4.o -o libMySharedLibrary.so
Run Code Online (Sandbox Code Playgroud)
哪个按预期工作!:)我的目标是从现在开始只能链接更改的目标文件,以加快并发链接过程.示例命令是:
g++34 -shared -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject3.o -o libMySharedLibrary.so
Run Code Online (Sandbox Code Playgroud)
哪个会libMySharedLibrary.so使用较新的目标文件进行更新,同时libMySharedLibrary.so还要保留较旧的目标文件.实际上,当我libMySharedLibrary.so使用上面的命令生成时,文件大小比包含所有目标文件的文件大小小得多,所以我几乎可以确定上面的命令没有按照我的意愿行事.
通过我的研究,我发现-i链接器有一个选项与-r选项相同,它似乎只是将所有目标文件组合成一个大对象文件.不幸的是,这似乎不是我想要的.
简而言之,我想在初始链接之后仅链接更改的目标文件,从而为将来的链接提供更快的链接过程.有没有办法做到这一点?
编辑:我尝试过的一个例子-i/-r:
示例命令: g++34 -Wl,-r -nostdlib -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject2.o MyObject3.o MyObject4.o -o AllMyObjects.o
我不得不添加-nostdlib标签以阻止它向我大吼大叫需要它,并删除-shared因为-r标签不允许共享对象.
这个命令似乎将我的所有.o文件都压缩成一个大的.o文件.所以,如果我只能从改变的.o文件那里更新那个.o文件,那就太好了.在最初创建AllMyObjects.o之后,我尝试了这个命令:g++34 -Wl,-r -nostdlib -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject3.o -o AllMyObjects.o,但它也会创建一个更小的(文件大小)AllMyObjects.o,所以我假设它不可能拥有所有的目标文件.我觉得这是我可能犯了一个小错误的东西.有人有什么建议吗?提前致谢.
使用visual studio 2008 SP1,
这一行:
LINK : debug\XXXXX.exe not found or not built by the last incremental link; performing full link
Run Code Online (Sandbox Code Playgroud)
无论我做出多么小的变化,每次编译项目时都会出现.
可能是什么原因?
我有一个大型二进制文件,它由许多静态库和独立的cpp文件构成.它配置为使用增量链接,所有优化都被禁用/Od- 它是调试版本.
我注意到如果我更改任何独立的cpp文件,那么增量链接会快速运行 - 1分钟.但是如果我在任何静态库中更改任何cpp,那么它会运行很长时间 - 10分钟,与普通链接相同.在这种情况下,我没有从增量链接中获益.有可能加快它吗?我用的是VS2005.
c++ performance visual-studio-2005 incremental-linking visual-studio
如果启用了增量链接,Visual C++会在$(TargetDir)中生成*.ilk文件,我可以覆盖此行为并将其重定向到另一个目录吗?(不使用构建后步骤)
正如Eclipse文档所建议的那样,我有一个org.eclipse.core.resources.IncrementalProjectBuilder编译每个源文件的文件,我也有一个org.eclipse.ui.editors.text.TextEditor可以编辑每个源文件的文件.每个源文件都编译到自己的编译单元中,但它可以引用其他(已编译的)源文件中的类型.
这个重要的两项任务是:
为了实现这一点,我想在内存中存储所有已编译类型的表示(以下称为"类型存储").
我的问题有两个:
上面的任务1由构建器执行,而任务2由编辑器执行.因此,他们都可以访问这种类型的商店,我应该创建一个他们都可以访问的静态存储,还是Eclipse提供了一种更简洁的方法来处理这个问题?请注意,在需要时实例化构建器和编辑器是eclipse,而不是我.
打开eclipse时,我不想重建整个项目,所以我可以重新填充我的类型存储.到目前为止,我最好的解决方案是将这些数据保存在某处,然后从那里重新填充我的商店(也许在项目打开时).这是其他增量编译器通常如何做到这一点的吗?我相信Java的方法是使用一个特殊的解析器,从类文件中有效地提取这些数据.
任何见解都会非常感激.这是我的第一个DSL.
eclipse-plugin incremental-linking incremental-build incremental-compiler
我有一个MSVC++项目,包括一个可执行文件,几个自己的静态库和一些预编译的静态第三方库.exe使用增量链接以加快构建时间.
当我在可执行项目中更改.cpp文件时,编译+链接非常快(<10s).
但是,当我在我自己的一个库中更改.cpp文件时,可执行项目似乎正在针对它使用的每个库执行完整链接.
我不太确定它是否真的是一个完整的链接,但是从"vc90.pdb未找到"链接器警告,我可以告诉它链接到一些根本没有改变的外部库.
这是项目结构的一个例子:
ExtLib1,ExtLib2和ExtLib3MyLib,使用第三方库ExtLib1MyExe,使用MyLib和ExtLib1-3改变.cpp文件MyLib,然后将导致MyExe被链接到MyLib,ExtLib1,ExtLib2和ExtLib3,即使增量链接被打开.
在我的项目中,完整链接大约需要5分钟,所以我问:有没有办法只重新链接已更改的库?
对于我使用Visual C++的大多数开发工作,我使用的是部分构建,例如按F7并且只更改了C++文件并重建了它们的依赖项,然后是增量链接.在将版本传递给测试之前,我会采取预防措施进行完全重建,这对我当前的项目大约需要45分钟.我看过很多帖子和文章提倡这个动作,但是这是必要的,如果有的话,为什么呢?它是否会影响交付的EXE或相关的PDB(我们也在测试中使用)?软件的功能与测试角度有何不同?
对于发布版本,我使用的是VS2005,增量编译和链接,预编译头文件.
我试图在VS2010中构建C ++程序,但遇到了从未见过的错误。
链接:致命错误LNK1104:无法打开文件C:... \ Debug \ labfour.ilk
我搜索了解决方案,但找不到Visual Studio链接器的任何其他实例,无法打开.ilk文件。有谁知道为什么会发生这种情况?我想知道是否有一种类似于error的解决方案,cannot find or open the PDB file您必须在其中调整解决方案资源管理器属性中的某些设置。
任何见解将不胜感激,谢谢。
我是一个局外人,试图看看Rust是否适合我的项目.
我读过Rust缺少渐进式编译(尽管有beta版功能).
incremental-linking incremental-build rust incremental-compiler