我想了解有关 C++ (clang++) 本地项目管理的更多信息。
所以我决定编写一个简单的C++游戏,而不安装libSDL2-devel包
这是我的项目的结构:
C++_游戏/
--make.sh #我的 bash 脚本来构建项目
--来源 ----main.cpp
--标题 ----SDL2 ---------SDL.h等
--lib ----SDL2 ---------libSDL2.a ---------libSDL2main.a
--obj --bin
这是我的 make.sh 脚本:
CC="clang++ -std=c++14"
HEADERS="-I ./headers/"
LIBS="-lSDL2main -lSDL2 -L ./lib/SDL2/"
OBJ="./obj/*.o"
BIN="./bin/exec.out"
echo ">> COMPILE SOURCES"
$CC $HEADERS -c ./sources/main.cpp -o ./obj/main.o
echo ">> LINKING OBJECT FILES"
$CC $LIBS $OBJ -o $BIN
echo ">> RUN BIN"
$BIN
这是基本的 C++ 代码:
#include <iostream>
#include <SDL2/SDL.h>
int main(int argc, char **argv){
if(SDL_Init(SDL_INIT_VIDEO) != 0)
std::cerr << SDL_GetError() << std::endl;
return 0;
}
当我尝试编译时,我得到:
>> COMPILE SOURCES
>> LINKING OBJECT FILES
/usr/bin/ld: ./obj/main.o : dans la fonction « main » :
main.cpp:(.text+0x1c): undefined reference to `SDL_Init'
/usr/bin/ld: main.cpp:(.text+0x2a): undefined reference to `SDL_GetError'
clang-15.0: error: linker command failed with exit code 1 (use -v to see invocation)
>> RUN BIN
知道如何修复此错误吗?
阅读 SDL2 文档 在谷歌上询问
您从未指定链接器应在链接步骤中链接哪些对象,您只包含
HEADERS
和 LIBS
但不包含您的对象。
强烈建议您废弃 make.sh 脚本并学习如何使用 make 或 CMAKE
除此之外,你也永远不会使用你的
$OBJ
变量