开发者

Link an .obj or .lib to a pre-existing executable

开发者 https://www.devze.com 2023-02-11 13:30 出处:网络
I have a pre-existing executable, for which I have no source, that want to link with an object file or static library (C++), for which I do have source.I\'m using Visual Studio 8.0.

I have a pre-existing executable, for which I have no source, that want to link with an object file or static library (C++), for which I do have source. I'm using Visual Studio 8.0.

The numbe开发者_JAVA技巧r one thing about this question, please don't ask why I need to do this. I just want to know how to do it (I'm pretty sure it can be done).

I tried adding the "myprogram.exe" executable to the "additional dependencies" C++ linker project property. This results in the following linker command line options:

/OUT:"C:\Users\me\Documents\Visual Studio 2008\Projects\SampleCppLibrary\Debug\SampleCppLibrary.lib" /NOLOGO myprogram.exe

When I build the project, I get this error:

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

I figured that trying to create a .lib that has an executable linked in might be inherently wrong. So I changed the project type to be an exe, and I intentionally did not give it a main entry point. Instead I gave it this:

extern int _tmain(int argc, _TCHAR* argv[]);

My hope is that the entry point in the pre-existing executable would fill the gap for the linker. Unfortunately, the error remained unchanged. Is there something wrong with the concept (and I already know it is completely weird)? Or perhaps I need to set additional flags to indicate the nature of the exe being linked with?


You can't link an executable as an object - mainly because you can have only one main.

What you probably want to do is call the existing executable as a function from a system() or popen() call in your new app.

edit: if you really need to deliver a single 'exe' I have included a helper program before as a binary resource (ie like an icon) had the caller write it to %temp%, executed it and deleted it! There are even APIs that create a temp file which can't be seen by other users.

0

精彩评论

暂无评论...
验证码 换一张
取 消