Ubuntu 20.04 LTS下本地部署SDL2库后GCC编译C++程序提示库未找到问题排查
解决本地SDL2库编译找不到的问题
我来帮你搞定这个编译报错!你当前的命令只指定了头文件的搜索路径,但链接阶段没告诉GCC去哪里找你本地编译的SDL2库文件,这就是“库未找到”的根源。而且你本地编译SDL2后,库文件默认生成在SDL2源码目录下的.libs子文件夹里,GCC不会自动扫描这个路径。
修正后的编译命令
你需要补充两个关键参数,同时把gcc换成g++(毕竟你编译的是C程序,g++能更好处理C的链接依赖):
g++ -o ./out/main ./src/main.cpp -ISDL2 -L./SDL2/.libs -lSDL2 -lSDL2main -lm -std=c++11 -Wl,-rpath=./SDL2/.libs
参数解释:
-L./SDL2/.libs:告诉GCC链接时去这个目录找SDL2库文件-Wl,-rpath=./SDL2/.libs:提前告诉程序运行时去哪里找SDL2库,避免后续运行时还报库找不到的错误
额外验证与可选方案
- 确认库文件存在:先进入
SDL2/.libs目录,看看有没有libSDL2.so(动态库)或libSDL2.a(静态库)。如果没有,说明之前的make可能没跑完,重新执行make all即可。 - 静态编译选项:如果你想生成不依赖动态库的可执行文件,可以加上
-static参数,强制链接静态库:
g++ -o ./out/main ./src/main.cpp -ISDL2 -L./SDL2/.libs -static -lSDL2 -lSDL2main -lm -std=c++11
- 自定义编译路径的情况:如果你之前执行
./configure时加了--prefix=./SDL2/local这类参数,库文件会生成在SDL2/local/lib下,这时候需要把命令里的./SDL2/.libs换成./SDL2/local/lib。
内容的提问来源于stack exchange,提问作者11D26PranavKumar
相关产品推荐
相关产品推荐

