使用 SDL2 的 C 程序不会用 clang 编译
C program using SDL2 will not compile with clang
我在尝试编译我的 C 程序时遇到问题。我在 macOS Catalina 上使用 clang 编译。
当我尝试 SDL_Init( SDL_INIT_VIDEO );
并编译时,clang 告诉我链接器命令失败
Undefined symbols for architecture x86_64:
"_SDL_Init", referenced from:
_main in main-1defaf.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我用 brew 安装了 SDL2 brew install SDL2
。所以这些是我试图让 clang 传递给链接器的标志,但没有一个起作用。
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2 \
-L/usr/local/Cellar/sdl2/2.0.12_1/lib
因为它们不起作用,所以我尝试添加 -framework
标志。我按照我发现的说明进行操作 here to install the framework. However the website didn't mention how to use it with clang. Clangs documentation 没有提及是否需要指向框架文件或目录,所以我尝试了几种不同的方法但无法正常工作。
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2 \
-framework SDL2
ld: framework not found SDL2
clang: error: linker command failed with exit code 1 (use -v to see invocation)
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2 \
-framework /Library/Framework/SDL2.framework
ld: framework not found /Library/Framework/SDL2.framework
clang: error: linker command failed with exit code 1 (use -v to see invocation)
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2 \
-framework /Library/Frameworks/SDL2.framework/SDL2
ld: framework not found /Library/Frameworks/SDL2.framework/SDL2
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我也试过只使用 XCode 进行编译,它构建成功,但未能 运行 并出现以下错误。我按照上面链接的教程中的说明进行操作。
2020-06-30 16:07:36.220432-0700 sdl_test[1867:31873] Metal API Validation Enabled
2020-06-30 16:07:36.273590-0700 sdl_test[1867:32300] flock failed to lock maps file: errno = 35
2020-06-30 16:07:36.274022-0700 sdl_test[1867:32300] flock failed to lock maps file: errno = 35
Program ended with exit code: 0
我已经重新启动计算机并清理了构建,根据一些 google 搜索,这似乎是在 XCode 的最新版本中引入的,需要解决。
我想坚持使用 clang,但不确定我还能尝试什么来编译它。我想了解后续步骤的方向。
这是我正在尝试的代码 运行。
#include <SDL2/SDL.h>
#include <stdio.h>
int main(int argc, const char * argv[]) {
SDL_Init( SDL_INIT_VIDEO );
return 0;
}
您缺少 -lSDL2
来引入共享库,如果您要使用 /usr/local/Cellar/sdl2/2.0.12_1/include/SDL2
,您应该只 #include <SDL.h>
。
考虑使用 pkg-config
来处理包含和 link 标志。
clang main.c -o main `pkg-config --libs --cflags sdl2`
我在尝试编译我的 C 程序时遇到问题。我在 macOS Catalina 上使用 clang 编译。
当我尝试 SDL_Init( SDL_INIT_VIDEO );
并编译时,clang 告诉我链接器命令失败
Undefined symbols for architecture x86_64:
"_SDL_Init", referenced from:
_main in main-1defaf.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我用 brew 安装了 SDL2 brew install SDL2
。所以这些是我试图让 clang 传递给链接器的标志,但没有一个起作用。
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2 \
-L/usr/local/Cellar/sdl2/2.0.12_1/lib
因为它们不起作用,所以我尝试添加 -framework
标志。我按照我发现的说明进行操作 here to install the framework. However the website didn't mention how to use it with clang. Clangs documentation 没有提及是否需要指向框架文件或目录,所以我尝试了几种不同的方法但无法正常工作。
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2 \
-framework SDL2
ld: framework not found SDL2
clang: error: linker command failed with exit code 1 (use -v to see invocation)
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2 \
-framework /Library/Framework/SDL2.framework
ld: framework not found /Library/Framework/SDL2.framework
clang: error: linker command failed with exit code 1 (use -v to see invocation)
> clang main.c -L/usr/local/Cellar/sdl2/2.0.12_1/include/SDL2 \
-framework /Library/Frameworks/SDL2.framework/SDL2
ld: framework not found /Library/Frameworks/SDL2.framework/SDL2
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我也试过只使用 XCode 进行编译,它构建成功,但未能 运行 并出现以下错误。我按照上面链接的教程中的说明进行操作。
2020-06-30 16:07:36.220432-0700 sdl_test[1867:31873] Metal API Validation Enabled
2020-06-30 16:07:36.273590-0700 sdl_test[1867:32300] flock failed to lock maps file: errno = 35
2020-06-30 16:07:36.274022-0700 sdl_test[1867:32300] flock failed to lock maps file: errno = 35
Program ended with exit code: 0
我已经重新启动计算机并清理了构建,根据一些 google 搜索,这似乎是在 XCode 的最新版本中引入的,需要解决。
我想坚持使用 clang,但不确定我还能尝试什么来编译它。我想了解后续步骤的方向。
这是我正在尝试的代码 运行。
#include <SDL2/SDL.h>
#include <stdio.h>
int main(int argc, const char * argv[]) {
SDL_Init( SDL_INIT_VIDEO );
return 0;
}
您缺少 -lSDL2
来引入共享库,如果您要使用 /usr/local/Cellar/sdl2/2.0.12_1/include/SDL2
,您应该只 #include <SDL.h>
。
考虑使用 pkg-config
来处理包含和 link 标志。
clang main.c -o main `pkg-config --libs --cflags sdl2`