C++ 可执行文件是不是包括 .obj、.lib 和 .dll?

Posted

技术标签:

【中文标题】C++ 可执行文件是不是包括 .obj、.lib 和 .dll?【英文标题】:Do C++ executable includes .obj, .lib and .dll?C++ 可执行文件是否包括 .obj、.lib 和 .dll? 【发布时间】:2018-09-26 00:50:12 【问题描述】:

我有一个输出 C++ .exe 的 C++ 项目。该项目依赖于一些.lib 和.dll。如果我想在另一台服务器上使用 .exe,我可以只传输 .exe 而没有 .lib、.dll 和 .obj 吗? .exe 是否已构建,因此它“包含”这些文件?

谢谢!

【问题讨论】:

没有它们你不能复制可执行文件,看看它是否能解决这个问题? 如果我们谈论的是 Visual Studio,那么您的程序将具有与您用作依赖项的 Visual Studio 版本等效的 Visual C++ Redistributable。您不应该复制 .DLL,而是在目标机器上安装 Visual C++ Redist。 Ken White:是的,但我想了解它是如何工作的。 【参考方案1】:

C++中的编译/链接过程比较复杂,但一般都遵循这个路径。

cpp/hpp-> 对象

obj -> lib (.a) 用于静态库 或者 obj -> dll (.so) 用于动态库

obj、lib、dll -> exe

链接过程将获取 obj 和静态库并形成一个自包含的 exe。链接器使exe依赖于dll,但exe不会包含动态库。

回答您的问题,运行时将需要 exe 和 dll。运行时肯定不需要 obj 和 static lib 文件。

【讨论】:

但是......不要不要简单地确定您的程序所依赖的DLL,然后盲目地将它们复制到另一台机器上。它可能有效,但很可能不会,因为可能缺少其他依赖项或配置。 除非您自己创建了这些 DLL,或者知道它们很容易以这种方式移植。 请在继续之前考虑@Steve 的重要评论。例如,不建议复制系统 dll

以上是关于C++ 可执行文件是不是包括 .obj、.lib 和 .dll?的主要内容,如果未能解决你的问题,请参考以下文章

.LIB 和 .OBJ 文件有啥区别? (Visual Studio C++)

C++ 可执行文件在运行时找不到库,即使它位于 /usr/lib 中(在 Linux 上)

编译的 C++ 可执行文件很大吗?

如何从 Visual C++ 的 .obj 文件构建静态和动态库?

一个C++项目, 已有一些静态库(.lib)和所有的函数声明(.h),怎么生成一个动态库(dll)

C++问题,关于LIB库文件