我有一个预先存在的可执行文件,我没有源代码,想要链接目标文件或静态库(C ++),我做有源。我正在使用Visual Studio 8.0。
关于这个问题的第一件事,请不要问为什么我需要这样做。我只是想知道该怎么做(我很确定它可以做到)。
我尝试将“myprogram.exe”可执行文件添加到“其他依赖项”C ++链接器项目属性中。这会产生以下链接器命令行选项:
/ OUT:“C:\ Users \ me \ Documents \ Visual Studio 2008 \ Projects \ SampleCppLibrary \ Debug \ SampleCppLibrary.lib”/ NOLOGO myprogram.exe
当我构建项目时,我收到此错误:
Error 1 fatal error LNK1107: invalid or corrupt file: cannot read at 0x268 c:\Users\me\Documents\Visual Studio 2008\Projects\SampleCppLibrary\SampleCppLibrary\myprogram.exe 1 SampleCppLibrary
我认为尝试创建一个链接有可执行文件的.lib可能本质上是错误的。所以我将项目类型更改为exe,我故意没有给它一个主要的切入点。相反,我给了它:
extern int _tmain(int argc, _TCHAR* argv[]);
我希望预先存在的可执行文件中的入口点将填补链接器的空白。不幸的是,错误保持不变。这个概念有问题吗(我已经知道这很奇怪)?或者我可能需要设置其他标志来指示与之链接的exe的性质?
答案 0 :(得分:0)
您无法将可执行文件链接为对象 - 主要是因为您只能有一个主文件。
您可能想要做的是将新的应用程序中的system()或popen()调用现有的可执行文件作为函数。
编辑:如果你真的需要提供一个'exe'我之前已经包含了一个辅助程序作为二进制资源(如图标)让调用者将其写入%temp%,执行并删除它!甚至有一些API可以创建一个其他用户无法看到的临时文件。