编译中的 Geany、g++ 和 SDL 错误

Geany, g++ and SDL errors in compilation

所以,我正在学习 linux 的简单 C++ 和 SDL 教程,但我在途中遇到了一些错误。

首先,我使用的是 Geany,我下载了相应的 SDL2 库,事情是这样的:

在我的项目文件夹中有一个 main.cxx 文件,如前所述,我用 geany 打开它:

我包含了这个库:

#include <iostream>
#include <SDL2/SDL.h>
#include  <SDL2/SDL_image.h>
#include <SDL2/SDL_mixer.h>

首先我遇到了一个奇怪的错误,编译成功执行但是在构建时我遇到了这个错误:

main.cxx: undefined reference to `SDL_Init'

稍作搜索后,我发现我必须将标签 -lSDL 添加到我的 geany 构建选项中,这样它们最终会变成这样:

编译:

g++ -Wall -c -lSDL "%f" 

建造:

g++ -Wall -o  -lSDL "%e" "%f" 

但是有一个问题,现在当我执行构建命令时,我得到一个:

G ++: error: main: There is no such file or directory

为什么我会收到此错误,是我包含了错误的库还是 g++ 的 .cxx 文件有问题? 我已经尝试在 .cxx 和 .cpp 之间进行转换。

提前致谢。

g++ -Wall -c -lSDL2 "%f"

绝对不需要在编译阶段指定库。删除 -lSDL.

g++ -Wall -o -lSDL2 "%e" "%f"

它调用编译器,暗示 linking(没有 -c 或其他 operation-specific 标志),并将输出文件名设置为 -lSDL2。也就是说,linker 将在当前工作目录中名为 -lSDL2 的文件中输出结果二进制文件。然后,当涉及到 link 的文件时,它会变成 main,它应该是 -o main,但是由于你已经破坏了标志顺序,它现在只是普通的文件名 linker 将尝试 link 生成二进制文件。正好这个文件不存在

长话短说,制作正确的 linking 行 - g++ -o "%e" %f -lSDL2(库排在最后,库顺序也很重要)。