![](/img/trans.png)
[英]Getting a linux SDL2 program to run on a computer that does not have SDL2 installed?
[英]What are the binaries files needed to my SDL2 program so it works in another computer without SDL2 installed
我必須隨基於 SDL2 的程序一起提供哪些二進制文件才能在未安裝 SDL 的情況下在另一台計算機上運行?
我的程序所需的庫:
iostream
SDL2/SDL.h
SDL2/SDL_image.h
ctime
cstdlib
我已經嘗試使用的二進制文件:
libSDL2.so
libSDL2-2.0.so.0.8.0
libSDL2_image.so
libSDL2_image-2.0.so.0.2.1
PS:我正在測試我的程序包是否適用於可啟動的 Xubuntu 筆式驅動器
簡短的回答是“使用 ldd”。 長答案如下。
ldd ./your_program
將顯示所有運行時依賴項的遞歸列表(您的和您使用的每個庫的依賴項,以及它們的依賴項,...)。
readelf -d ./your_program | grep NEEDED
readelf -d ./your_program | grep NEEDED
將顯示您的直接依賴項(只有您的程序實際鏈接的依賴項 - 並不一定意味着您只能復制那些)。
LD_DEBUG
envvar 可用於跟蹤在運行時加載了哪些庫(例如使用dlopen
)。
如果您的目標是一個特定的發行版,那么構建具有指定依賴項的包可能會更簡單,例如apt
會為您安裝 SDL。
下一個大問題是您從哪里獲得 SDL。 所以它不會沒有如運行許多發行禁用SDL動態裝載機libX11
,韋蘭libXi,的PulseAudio,...這是非常好的為分發這樣做,因為它本來就不是你只是一些庫復制到另一台機器。 如果您自己構建它,您可以擁有更少的直接依賴項,並且 SDL 將嘗試dlopen
甚至它需要的東西。 SDL2_image 可能是更簡單的例子 - 它可能依賴於 libjpeg、libpng、libz 等,您可能不需要某些格式,但如果您已鏈接到這些庫,則沒有它們就無法運行。
考慮您可以考慮“始終存在”的庫。 例如,攜帶 libX11 或 libc 和許多其他人是沒有意義的。 這部分為所有操作系統共享 - 由於多種原因,您的程序無法獲得一半的操作系統。
總而言之,使用啟用動態加載的 SDL 構建(我認為它現在是默認設置了很長時間),復制 SDL/SDL_image,使用LD_LIBRARIES_PATH
設置您的庫位置,使用ldd
驗證列表,您應該沒問題。 不要復制 libc、libstdc++、libpthread、libm。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.