簡體   English   中英

我的 SDL2 程序需要哪些二進制文件才能在另一台沒有安裝 SDL2 的計算機上運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM