【问题标题】:Executable file & dll process [closed]可执行文件和 dll 进程
【发布时间】:2017-05-12 11:59:20
【问题描述】:

我必须学习哪种软件或编程语言来独立创建没有任何 .dll 或其他格式的单个可执行程序?

任何建议我都将不胜感激!

【问题讨论】:

  • 如果您想要真正可移植的东西,请考虑使用在 Java 或 python 等虚拟机上运行的东西。
  • 您就一个非常广泛的问题征求意见。这太离题了。
  • 这个问题没有多大意义。 Visual Studio 不需要任何类型的注册。当您创建一个新的 C++ 项目时,它会立即询问您是希望它是静态链接还是动态链接。它还可以为 Linux 生成和编译项目。
  • 您在询问一个 XY 问题。 C++ 可以做到这一点。如果您在执行此操作时遇到问题,请就这些问题提出问题
  • 以 Visual Studio 为例。或几乎任何其他编译器工具链。您假设是因为您遇到了不可能的错误。考虑到错误可能仅仅意味着你做错了。您的问题应该是如何正确地做而不是使用其他工具。

标签: windows operating-system hex machine-instruction


【解决方案1】:

它是 operating system 特定的(不是由语言本身定义的)。阅读有关linkers 的更多信息。

您可能希望使用 C++11(或 C++14)并指示您的 C++ 编译器静态链接您的可执行文件。因此,您应该阅读编译器的文档;使用GCC,您可以将pass -static 发送到g++ 命令。

您可能还想使用Go language。 Go 的常用编译器试图生成静态链接的可执行文件。

顺便说一句,静态链接的executable 仍然有dependencies,例如到它的operating system kernel(可能还有实用程序和一些系统文件):显然,Windows 的静态链接可执行文件不会在 Linux 上运行。

(例如,在 Linux 上,任何使用标准 system(3) 函数的程序静默依赖于/bin/sh....)

在实践中,我一般不建议静态链接C standard library,而是YMMV。

当然,你需要一些source code editor 来编写你的代码(我更喜欢GNU emacs)。有些人使用IDEs,但我更喜欢显式运行编译命令(可能使用一些build automation 工具,如GNU make)。

(注意 DevC++ 或 CodeBlocks 是一个 IDE,而不是 compiler

注意:我建议阅读Operating Systems : Three Easy Pieces(免费downloadable,每章都有自己的PDF文件)以了解更多关于操作系统的信息。

【讨论】:

  • 所有 C++ 编译器也会生成静态链接的可执行文件。包括 Visual Studio。这只是一个项目设置
  • 我在第二段中确实说过。
  • 谈到 Go 语言,您说过 Go 的常用编译器试图生成静态链接的可执行文件。您的意思是单个可执行文件可以放在任何目录中并自动生成链接到可以支持 go 编译器的库吗?或者它存在于 .executable 程序本身中?对不起,我对编译器、dll、任何与基本程序相关的东西还是一窍不通。
  • @BasileStarynkevitch GNU emacs 似乎是最合适的答案,但 GNU emacs 是编译器吗?它会生成可执行文件吗?
  • @MartinF 你真的应该花几天时间来阅读操作系统:三个简单的部分这本书。因为你看起来很困惑。我们没有地方和时间在这里解释那本书中的所有内容。
【解决方案2】:

真正独立的“可执行文件”是您闪存到嵌入式设备上的图像。您的图像可以(但不需要)捆绑一个库,例如作为一种迷你操作系统的 FreeRTOS。除了实际的硬件,您的程序将完全自给自足。

否则,您至少有幸拥有一个操作系统,可以访问您的语言的“运行时”支持库(尽管这通常可以静态链接)并且可能是第三方最重要的库(通常也可能是静态链接的)。

有时,当您尝试自包含时,您会朝着另一个方向走得太远,以至于实际上您的“程序”根本无法执行,而只是一个要通过 Python 或 Go 或 JavaScript 或 VBScript 解释器传递的脚本。这实际上与自包含相反,但如果该语言的实现存在于您的所有目标平台上,它会很好且可移植。

在虚拟机(Java、.NET)上运行的代码是介于两者之间的一种中间方式。

【讨论】:

  • 虽然其他语言实际上根本不是我的可执行程序,你能建议我可以创建单个可执行文件的语言吗?并且可以创建我自己的 dll(使用我自己的代码分别构建 .exe 和 dll)?我的项目研究非常需要它。
  • @Marfin.F:阅读整个页面上已经提供给您的信息。
  • 我想我是通过在 netbeans IDE 或 VM 中尝试 JAVA 来开始我的研究的。我会尝试两个!
【解决方案3】:

Visual Studio:

Project->'project' Properties

Configuration Properties -> C++ -> Code Generation

Runtime Library -> 多线程[调试]

不要使用多线程 [debug] DLL

另外,为 Debug 构建设置 [debug] 而不是为 Release 构建设置 [debug]。您可以使用左上角的“配置”下拉菜单在构建类型之间切换。

【讨论】:

  • s.pictub.club/2017/05/13/7kQPLo.png 先生,我在我的项目属性中找不到配置属性:(
  • @Marfin.F:只要谷歌“signtool was not found”,然后找到这个顶级结果:stackoverflow.com/q/31833142/560648你可能不需要“发布”,反正。
  • @BoundaryImposition 如果 Publish 不是制作 .executable 程序所必需的,您能告诉我其他方式吗,先生?
  • 如果你阅读文档会更好。这里不适合教您如何创建和构建软件的所有知识。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2020-11-19
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
相关资源
最近更新 更多