SFML i Tworzenie plików *.so

SFML i Tworzenie plików *.so
tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 538
0

Cześć. Potrzebuję wygenerować pliki *.so z SFML. Ale o co dokładnie chodzi.
No więc próbuję napisać aplikację dla Androida z wykorzystaniem biblioteki SFML.
Dowiedziałem się, że najlepszą opcją będzie zbudowanie SFML 2.5.1 (choć wolałbym 3.0.2) ze źródeł. Niestety nie udało mi się zbudować SFML i nie wiem jak to zrobić. I właśnie o to chodzi, że potrzebuję wygenerowanych przez SFML plików *.so do projektu w Android Studio.
Moje pytanie: jak wygenerować pliki *.so dla SFML 2.5.1 ?

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2196
1

wip...

  1. Zainstaluj Qt
    a) pobierz https://www.qt.io/development/download-qt-installer-oss
    b) zaznacz jak na obrazku 6.10.1 + Android + qtcreator
    screenshot-20251211201932.png

  2. Skonfiguruj Qt do kompilacji Android (edycja -> ustawienia)
    a) pobierz https://download.oracle.com/java/17/archive/jdk-17.0.12_windows-x64_bin.zip i rozpakuj
    np. do c:\android
    screenshot-20251211204448.png
    b) ustaw ścieżki:
    -- JDK do rozpakowanego folderu
    -- SDK do pustego folderu
    -- oepnssl do pustego folderu
    c) naciśnij "Ustaw SDK" i akceptuj wszystko aż skończy

  3. Otwórz projekt i uruchom "build"
    a) Pliki - > Otworz plik lub projekt -> wybierz CMakeLists.txt
    b) kliknij w Android 6.10.1 Clang Arm64
    c) poczekaj dłuzsza chwile az cmake skonczy pobieraz zaleznosc (wynika cmake na zakłade "komunikaty ogolne")
    d) build

screenshot-20251211211604.png

Koniec

tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 538
0

screenshot-20251211212502.png

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2196
1

screenshot-20251211212759.png

tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 538
0

error ":-1: ostrzeżenie: Product type is not an application, not building an APK."

screenshot-20251211213548.png

tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 538
0

Komunikaty kompilatora:

Kopiuj
21:44:22: Uruchamianie kroków budowania dla projektu CMakeSFMLProject...
21:44:22: Uruchamianie "C:\Qt\Tools\CMake_64\bin\cmake.exe" --build C:/Users/tBane/Desktop/TestSFML/build/Qt_6_10_1_for_Android_arm64_v8a-Debug --target all
ninja: no work to do.
21:44:22: Komenda "C:\Qt\Tools\CMake_64\bin\cmake.exe --build C:/Users/tBane/Desktop/TestSFML/build/Qt_6_10_1_for_Android_arm64_v8a-Debug --target all" poprawnie zakończona.
21:44:22: Product type is not an application, not building an APK.
21:44:22: Czas trwania: 00:00.
tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 538
0

nie mam folderu build\Android_Qt_6_10_1_Clang_arm64_v8a-Debug\lib

screenshot-20251211214947.png

ZK
  • Rejestracja: dni
  • Ostatnio: dni
0

wpadłem tylko na chwilę i nie wiem czy mogę się podpiąć pod temat ale zapytam - czy budował ktoś z was statyczne Qt? Chodzi o to, żeby plik exe miał wszystkie *dll zlinkowane - nie pytajcie po co mi to potrzebne - potrzebne ale nie tylko do jednego projektu - czyli chcę napisać swój instalator

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2196
1

oczywiście Qt jest trochę armatą na muchy, wystarczy samo NDK
sądzac to kodzie cmake projektu jak nie podasz parametrów to sam buduje zależności
wiec im prosciej tym lepiej: np. tak:

Kopiuj
@rem uruchamiamy w folderze SFML
mkdir bb
cd bb

@rem dodaje folder z cmake i ninja do PATH
set PATH=C:\Qt\Tools\Ninja;C:\Qt\Tools\CMake_64\bin;%PATH%
set ANDROID_NDK=C:\android\Sdk\ndk\27.2.12479018

cmake -G "Ninja" ^
  -DCMAKE_TOOLCHAIN_FILE=%ANDROID_NDK%\build/cmake/android.toolchain.cmake ^
  -DANDROID_ABI=arm64-v8a ^
  -DANDROID_PLATFORM=24 ^
  -DCMAKE_BUILD_TYPE=Release ^
  -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384" ^ 
  -DBUILD_SHARED_LIBS=ON ../
  
cmake --build . --config Release  

pause
tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 538
0

Mam jeszcze jeden problem. Pliki *.so muszą mieć 16KB

Kopiuj
APK app-debug.apk is not compatible with 16 KB devices.
Some libraries have LOAD segments not aligned at 16 KB boundaries:
lib/arm64-v8a/libnative-lib.so
lib/arm64-v8a/libsfml-audio-d.so
lib/arm64-v8a/libsfml-graphics-d.so
lib/arm64-v8a/libsfml-network-d.so
lib/arm64-v8a/libsfml-system-d.so
Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2196
0

sprawdz z dopisanym paraemtrem

Kopiuj
-DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384" ^
tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 538
0

o to chodzi ?

screenshot-20251212001235.png

BR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 30
0

a nie masz tam na tej liście CMAKE_SHARED_LINKER_FLAGS?
jak masz to do wartości dodaj to: -Wl,-z,max-page-size=16384

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2196
0

@tBane I jak sytuacja z problemem ?

tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 538
0

w Dodatkowe opcje CMake należy wpisać (żeby pliki *.so miały page size 16KB)

Kopiuj
-DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384"
-DCMAKE_MODULE_LINKER_FLAGS="-Wl,-z,max-page-size=16384"
-DCMAKE_EXE_LINKER_FLAGS="-Wl,-z,max-page-size=16384"

Udało się. Biblioteki zbudowane. Ładuje SFML ale jest problem bo wyrzuca z aplikacji przy próbie utworzenia okna

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2196
1

@tBane: na tego typu zagadki odpowiada debugger , ewentualnie popros LLM o zweryfikowanie kodu

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.