如何安装编译在LinuxUbuntu的SDL2 C C 05

如何安装编译在LinuxUbuntu的SDL2 C C 05,第1张

1.使用apt-get 安装开发包

sudo apt-get install libsdl2-dev

2.编辑源文件, hello.c

#include <SDL2/SDL.h>int main(){SDL_Window* window =0 SDL_Renderer* render=0 SDL_Init(SDL_INIT_EVERYTHING) window=SDL_CreateWindow("hello",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,640,480,SDL_WINDOW_SHOWN) render=SDL_CreateRenderer(window,-1,0) SDL_SetRenderDrawColor(render,0,255,0,255) SDL_RenderClear(render) SDL_RenderPresent(render) SDL_Delay(3000) SDL_DestroyWindow(window) SDL_DestroyRenderer(render) SDL_Quit() return 0}

3.编译

gcc hello.c -lSDL2

如果编译成功,会生成a.out可执行文件

4.运行

./a.out

gcc编译时,当使用动态库编译可以按照几种写法

1.gcc test.c ./libSDL2-2.so

2.gcc test.c -lSDL2-2

3.gcc test.c -L/home/test -lSDL2-2

一般的编译参数都是按照2或3去写

2写法的含义是从/lib或者/usr/lib目录下寻找名称为SDL2-2的库,即寻找/lib/libSDL2-2.so或者/usr/lib/libSDL2-2.so文件进行链接,当然如果没有动态库就会去找静态库,再没有应该就会在编译时报错

3写法的含义是从-L参数首先从指定的目录中寻找需要链接的库文件,随后再去寻找系统文件夹中是否存在需要的库

1写法的含义是将当前目录下的./libSDL2-2.so.0文件链接进最终文件,因此执行readelf -a a.out后在动态库部分所看到的路径就是./libSDL2-2.so.0,进而在执行文件时仅会从当前目录下寻找libSDL2-2.so.0文件,当执行文件时所在的目录下没有该文件时就会出现找不到库文件的 *** 作

你第二次 *** 作时,因为function.so库文件与a.out文件在同一个目录,同时也是在该目录下执行的ldd *** 作及运行a.out,a.out在加载动态库时从当前目录下找到了所需要的库文件,此时能够执行成功(ldd命令实质是一个脚本,通过设置环境变量运行动态库链接器来输出所有待链接的动态库)。

你可以试试将a.out拷贝至其他目录再次运行,将出现和第一次 *** 作时一样的现象,找不到function.so文件。

具体的解决方法就是修改编译参数,将./libSDL2-2.so.0修改为-lSDL2-2并将libSDL2-2.so.0文件拷贝至/usr/lib目录下,并且可能因为没有修改链接器的缓存文件(将可能找不到带版本号后缀的动态库),需要在/usr/lib目录下建立一个文件连接(ln -s libSDL2-2.so.0 libSDL2-2.so)或者直接修改名称为libSDL2-2.so


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7124094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存