编译器也编译include吗? 当我编译C++上的SDL项目时,它为我创建了一个可执行文件。当我运行该可执行文件时,如果同一目录中没有SDL.dll,它将不起作用。我理解这一点,因为它需要找到所有正在使用的库和API
但是,当我创建自己的库并将其包含在代码中时,为什么不需要将它放在同一个目录中呢?为什么它可以被完全删除,而可执行文件仍然可以运行?我自己的库与示例中的SDL有什么区别?是的,编译器编译的是翻译单元或编译单元。这包括每个cpp文件的标题 然后你有了链接器。这会将编译后的代码链接成可用的形式 在应用程序运行时,可能会搜索并包含.dll 当您使用自己的库时,您可能会在链接步骤中将其包含到程序中。(静态链接)您可以删除它,因为不再需要它编译器也编译include吗? 当我编译C++上的SDL项目时,它为我创建了一个可执行文件。当我运行该可执行文件时,如果同一目录中没有SDL.dll,它将不起作用。我理解这一点,因为它需要找到所有正在使用的库和API,c++,C++,但是,当我创建自己的库并将其包含在代码中时,为什么不需要将它放在同一个目录中呢?为什么它可以被完全删除,而可执行文件仍然可以运行?我自己的库与示例中的SDL有什么区别?是的,编译器编译的是翻译单元或编译单元。这包括每个cpp文件的标题 然后你有了链接器。这会将编译后的代码链接成可用的形式 在应用程序运行时,可能会搜索并包含.dll 当您使用自己的库时,您可能会在链接步骤中将其包含到程序中。(静态链接)您可以删除它,因为不再需要它 (因为你提供的细节有点不清楚——这可能是全部,也可能不是全部)我不
(因为你提供的细节有点不清楚——这可能是全部,也可能不是全部)我不是专家,但我认为这些信息可能有用 编译取决于使用的编译器,但通常需要4个步骤,这是GCC的一个示例:
- 预处理
- 汇编
- 装配
- 连接
- (正确)随二进制文件一起提供SDL2.dll,并在安装中进行设置
- (有点错误)将SDL构建为静态obj,并将其与二进制文件链接,构建一个独立的可执行文件
祝你好运;) 您是否将自己的库编译为静态库?我指的是我自己的头文件和cpp文件。