logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Cross-compiling lekkiej aplikacji sieciowej w C dla Windows i MacOS?

_jta_ 03 Cze 2025 12:26 861 41
Najlepsze odpowiedzi

Jak zbudować lekką aplikację sieciową w C dla Windows i macOS bez kompilowania na systemie docelowym?

Tak — dla Windows możesz kompilować z Linuksa przez MinGW-w64 albo `clang --target=x86_64-w64-windows-gnu`, a dla macOS realną drogą są osxcross lub `zig cc`, przy czym i tak potrzebujesz legalnie pozyskanego macOS SDK z Xcode; alternatywnie najprościej budować binarki na prawdziwym macOS w CI, np. na GitHub Actions ([#21569644], [#21569595]). Do lekkiej aplikacji sieciowej trzymaj się czystych BSD sockets albo małej biblioteki typu Mongoose/civetweb, zamiast ciężkich frameworków, bo to ogranicza zależności i rozmiar binarki ([#21569644], [#21569071]). Do budowania wieloplatformowego użyj CMake lub Meson z plikami toolchain dla MinGW i osxcross ([#21569644]). Na macOS pamiętaj też o podpisaniu `codesign --timestamp --options runtime`, a jeśli aplikacja ma trafić do zwykłych użytkowników, o notarizacji; to najwygodniej zrobić w CI lub na MacStadium/prawdziwym Macu ([#21569644], [#21569595]).
Wygenerowane przez model językowy.
  • #1 21568487
    _jta_
    Specjalista elektronik
    Posty: 48970
    Pomógł: 3207
    Ocena: 4230
    Czy są jakieś recepty na zrobienie prostej aplikacji sieciowej działającej (1) pod Windows, (2) pod MacOS, bez potrzeby użycia systemu docelowego do jej zrobienia (czyli z cross-compiling, chciałbym z C)? Preferowałbym, żeby była "lightweight". Dla Linux-a mam sposób, i mogę zrobić prostą aplikację, której wystarczy nawet 8kB RAM-u (mniej chyba nie można, kod i stos powinny być na odrębnych stronach pamięci, a strony są po 4kB).

    Pewnym rozwiązaniem, którego wolałbym jednak uniknąć, jest zainstalowanie na docelowym systemie jakiegoś interpretera języka skryptowego (znam dwa, w których to się łatwo robi: Python, ale jest duży, albo Tcl, ale tu zmieniają się warunki licencji - sam Tcl jest darmowy, interpreter skompilowany np. pod Windows można znaleźć jakiś darmowy, ale taki, który kilka lat temu był darmowy, dziś jest płatny - a ja wolę rozwiązanie, do którego za kilka lat nie trzeba będzie szukać nowego interpretera).
  • #2 21568497
    hindoos
    Poziom 36  
    Posty: 3728
    Pomógł: 287
    Ocena: 656
    Współczesne systemy Windows i MacOS mają preinstalowanego Pythona. Nie wiem czy to coś zmienia w Twojej sytuacji?
  • #3 21568709
    _jta_
    Specjalista elektronik
    Posty: 48970
    Pomógł: 3207
    Ocena: 4230
    Mam wrażenie, że Windows 11 na laptopie, którego niedawno sprawdzałem, nie miał, i doinstalowałem (a na innym komputerze, na którym robiłem upgrade Windows do 11, jest jakiś stary Python (z 2022 roku), który ja zainstalowałem, jest Python do LibreOffice'a, ale nie widzę, by był jakiś automatycznie instalowany z systemem). Ale i tak problem jest w tym, że ta aplikacja może być używana przez dziesiątki osób, które mają różne wersje systemów, czasem dość stare, więc trzeba by u każdego sprawdzać i instalować.
  • #4 21568745
    hindoos
    Poziom 36  
    Posty: 3728
    Pomógł: 287
    Ocena: 656
    W sumie największa różnica jest między Pythonem 2.xx a 3.xx
    Więc jeśli nie będziesz używać ultra specyficznych funkcjonalności to przygotowanie jej pod 3 powinno zapewnić bardzo dobre pokrycie. Ale domyślam się że bardzo dobre to nie stuprocentowe ;)
  • #6 21569071
    Damian_Max
    Poziom 21  
    Posty: 396
    Pomógł: 40
    Ocena: 96
    Siedzę w programowaniu i nie robi się cross-kompilowania C pomiędzy linux ⭤ windows ⭤ macOS (w każdym razie to rzeźba, w większym lub mniejszym stopniu), z tym że rozwiązanie jest dość proste: kompilować na ów systemach.
    Jeśli to stanowi problem natury technicznej, to wrzucić projekt na GH i użyć GH Actions. jeśli ów projekt skompiluje się w dwie minuty, to prawdopodobnie będziesz miał to wszystko za darmo. Jeśli nie za darmo, to naprawdę za pare złoty miesięcznie (zakładając niewielką ilość wydań).
    ^^ w zależności od wielkości projektu, można pokusić się o użycie multiplatformowego systemu do budowania.

    Może warto rozważyć uruchomienie tego w przeglądarce? Tak, jest to ciężkie w porównaniu do 4kB, ale rozwiązuje masę innych problemów. Sam język to js, ts, ale można też kompilować różne do pliku wasm, jeśli umiesz programować; to używajac AI w innym języku napiszesz prostą apkę bez problemu.
    Z drugiej strony jak na szali kładziesz python (którego to interpreter na dzień dobry połyka 40MB), to chyba zasoby nie są problemem.

    Pytanie dodatkowe, czy ów apka ma mieć GUI?

    Jeśli instalacja python to problem (z czym się zgadzam), to możesz 'spakować' skrypt i interpreter pythona do pojedyńczego pliku exe (są gotowe narzędzia).

    Ja bym nie proponował tego robić w C, dużo łatwiej zrobić coś multiplatformowego w python / js / jakis innych językach. Jeśli jednak zostaniesz przy C, to oprócz rozważenia C++, warto wybrać jakieś multiplatformowe biblioteki pomocnicze, choćby do networkingu.

    Czy przewidujesz aktualizacje ów aplikacji(?), jak planujesz ją realizować (ręcznie, automatycznie, …)?

    (troche to haotycznie napisałem, bo troche wiele niewiadomych xD)
  • #7 21569109
    Konto nie istnieje
    Poziom 1  
  • #8 21569137
    _jta_
    Specjalista elektronik
    Posty: 48970
    Pomógł: 3207
    Ocena: 4230
    >>21569071 Użycie interpretera JavaScript wbudowanego w przeglądarkę byłoby ciekawą możliwością, bo przeglądarki ze wsparciem JS są wszędzie, ale mało o nim wiem - a potrzebuję komunikacji poprzez sieć, gdzie coś o tym znajdę? Bo samo zmienianie tekstów i obrazków w oknie przeglądarki mi nie wystarczy, potrzebuję zrobić w tym m.in. prosty serwer TCP.
  • #9 21569143
    Damian_Max
    Poziom 21  
    Posty: 396
    Pomógł: 40
    Ocena: 96
    Aa, no to praktycznie odpada*, bo w przeglądarkowym javascript, nie da się otworzyć portu (może to i lepiej, bo bezpieczeństwo spadłoby jeszcze bardziej).
    W przeglądarkowym javascript można robić pełne requesty HTTP (metoda fetch), czy też nawiązywać połączenie websocket, czyli taki networking na wysokim poziomie tylko.
    W celu nawiązania dwukierunkowej komunikacji między klientami w przeglądarce, używa się pośredniczącego serwera (czy to http, czy websocket, czy też rozwiązań opartych o webrtc).

    Więc jeśli ta komunikacja, miałaby polegać na wysyłaniu pełnych requestów, oraz nie przeszkadzałoby Ci scentralizowanie, to może to dalej być opcją.
    Nie żeby mnie to jakoś bardzo interesowało, jednak jeśli podałbyś więcej założeń co do samego zadanie/projektu które chcesz zrealizować, to łatwiej byłoby doradzić odpowiednią technologię xD. W czasach AI, napisanie czegoś prostego w języku programowania którego się nie zna, przy założeniu że zna się jakikolwiek, nie jest takie trudne.

    Dodano po 11 [minuty]:

    Czy ten serwer TCP, to ma być dokładnie serwerem TCP/IP, czy może to być serwer HTTP?
  • #10 21569204
    _jta_
    Specjalista elektronik
    Posty: 48970
    Pomógł: 3207
    Ocena: 4230
    Założenie jest takie, że to ma być program pośredniczący w drukowaniu na drukarce sieciowej, zapewniający zgodność wysyłanego zadania wydruku z wymaganiami drukarki. Drukarka ma jakieś sterowniki do każdego systemu, ale działają miernie, i od paru lat nie daje się tego dobrze ustawić - z jednej, czy dwu aplikacji drukuje, z innych nie, i to na każdym komputerze inaczej.

    Damian_Max napisał:
    Czy ten serwer TCP, to ma być dokładnie serwerem TCP/IP, czy może to być serwer HTTP?

    Hm... musiałbym sprawdzić, czy można wysyłać wydruk poprzez HTTP tak, by to było wygodne - żeby użytkownik potrzebował tylko wybrać drukarkę z dowolnej aplikacji, z jakiej chce drukować, a nie zapisywać na plik i wysyłać go przeglądarką. Chodzi tu o ergonomię używania drukarki i brak konieczności stosowania złożonej recepty, bo użytkownicy mają co innego do roboty.
  • #11 21569237
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    Damian_Max napisał:
    warto wybrać jakieś multiplatformowe biblioteki pomocnicze, choćby do networkingu.


    Programowanie na surowych socketach, jak biblioteka standardowa C daje, obawiam się mam znaczne róznice w Windows. Trzeba utrzymywać i testować *) dwie grupy kodu.
    Wzięcie uznanej biblioteki sieciowej to niemal konieczność.

    *) głupi cross-compiling upada.

    To nam trochę zwiększa objętość programu (sądzę że target miniaturyzacji może nie mieć sensu)

    Damian_Max napisał:
    Jeśli jednak zostaniesz przy C, to oprócz rozważenia C++,


    W C++ jest wybór dobrych bibliotek, aktywnych i przenoszonych na systemy.
    W tym boost/asio ale to nie dla apostołów C.

    Dodano po 5 [minuty]:

    _jta_ napisał:
    Założenie jest takie, że to ma być program pośredniczący w drukowaniu na drukarce sieciowej, zapewniający zgodność wysyłanego zadania wydruku z wymaganiami drukarki. Drukarka ma jakieś sterowniki do każdego systemu, ale działają miernie, i od paru lat nie daje się tego dobrze ustawić - z jednej, czy dwu aplikacji drukuje, z innych nie, i to na każdym komputerze inaczej.



    Zniuansowane sterowanie drukarką (bo oryginalny sterownik nie umie) , znając upodobanie autora do wyższości surowego C ?
    Toż to będzie lata powstawało.
    Uznane korporacje nie potrafią, a my Małe Jasie zrobimy dobrze ? Mając spektrum języków, i psychiczną gotowość pracy z bibliotekami, nigdy bym się nie podjął
  • #12 21569270
    _jta_
    Specjalista elektronik
    Posty: 48970
    Pomógł: 3207
    Ocena: 4230
    Próbowałem już programowania na socket-ach w Windows, był jakiś problem, ale poza tym działało.

    Widziałem już wiele błędów w tym, co zrobiły "uznane korporacje". Więc dla mnie to żaden argument.

    Ale wciąż nikt mi nie podał recepty na zrobienie mini-aplikacji sieciowej na Windows, ani MacOS.
  • #13 21569298
    hindoos
    Poziom 36  
    Posty: 3728
    Pomógł: 287
    Ocena: 656
    _jta_ napisał:
    by to było wygodne - żeby użytkownik potrzebował tylko wybrać drukarkę z dowolnej aplikacji, z jakiej chce drukować

    Niech użyje wydruku do PDF i wskaże dysk sieciowy jako lokalizację zapisu.
    A jeden program podłączony do drukarki będzie monitorować ten folder sieciowy i cokolwiek się tam pojawi wypchnie na drukarkę i usunie PDF z katalogu.
  • #14 21569309
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    _jta_ napisał:
    Widziałem już wiele błędów w tym, co zrobiły "uznane korporacje". Więc dla mnie to żaden argument.


    Znam tą religię.
    Mimo to, nie zmieniam swojego poglądu, że wyobrażenie "ja Mały Jaś zrobię to lepiej" jest dziecinadą.
  • #15 21569318
    Damian_Max
    Poziom 21  
    Posty: 396
    Pomógł: 40
    Ocena: 96
    Zapytałem o TCP/HTTP, ponieważ jest więcej wygodnych (wysokopoziomowych) gotowców dla HTTP, ale skoro Twój serwer ma za zadanie zaimplementować protokół wydruku, to po prostu na tym się nie znam.
    Głos w dyskusji zawarłem, ponieważ brałem udział w budowie wielo platformowej aplikacji natywnej (C/C++); z serwerem HTTP i innymi bajerami, na te trzy systemy (choć wersją windowsową zajmował się ktoś inną).
    Dlatego wiem, że ilość różnorakich problemów jest przytłaczająca, w porównaniu do 'głupiego' python3, gdzie 'demo' mini aplikacji sieciowej można skopiować ze strony tornado LINK:
    Kod: Python
    Zaloguj się, aby zobaczyć kod

    (niestety nie wiem, jak trudne byłoby zaimplementowanie protokołu wydruku)

    Skoro to ma być rozwiązanie sieciowe, to można też drukarkę podłączyć do RPi, a na RPi postawić serwer wydruku, zgodny ze wszystkim, nawet AirPrint-em → są na to gotowe projekty, kwestia skonfigurowania (szukać pod hasłem: RPi serwer wydruku).

    Na windows nie tworzy się binarki na macOS, możesz co najwyżej zainstalować hackintosh w wirtualce (może nawet są gotowe do pobrania) i tam kompilować. A jak nie chcesz łamać licencji jabłka, to użyj GH Actions. W każdym razie nie znam sposobu na cross-kompilację z windows na macOS. Na codzień pracuję na macOS i jak byś upublicznił swój kod, to mogę go spróbować skompilować + podesłać Ci feedback z napotkanych problemów, może nawet z poprawkami.

    Oo, albo jak pisze @hindoos, po prostu przeskoczyć problem rozwiązując go troche inaczej.
  • #16 21569349
    _jta_
    Specjalista elektronik
    Posty: 48970
    Pomógł: 3207
    Ocena: 4230
    JacekCz - nie interesują mnie poglądy, tylko znalezienie rozwiązania problemu, nie trzeba na to tworzyć ideologii. Ja jestem otwarty na wszelkie próby rozwiązania, byleby praktycznie wykonalne, coś proponujesz?

    Damian_Max napisał:
    Skoro to ma być rozwiązanie sieciowe, to można też drukarkę podłączyć do RPi, a na RPi postawić serwer wydruku

    Sprawa wygląda tak, że zadanie wydruku musi zawierać jakąś identyfikację użytkownika (jeśli komputer ma tylko jednego użytkownika, to wystarczy identyfikacja komputera, z którego wydruk pochodzi), i głównym problemem jest nie poprawienie wydruku, a ustalenie, czyj on jest - sposób łączności musi to uwzględniać. I jest taka niewygoda, że wiele osób używa Wi-Fi, który łączy się poprzez router-a - dla lokalnej sieci mogę identyfikować po adresie MAC, jeśli to jest komputer osobisty, a przy użyciu protokołu AUTH, jeśli serwer z systemem Linux. Ale wolałbym mieć jeden sposób, a nie takie łatanie.

    Użytkownikom nie odpowiada drukowanie do pliku - pokazywałem im, jak to zrobić, to działa, ale oni chcą, żeby z każdej aplikacji wybierało się drukarkę i na niej drukowało, tak im wygodniej.
  • #17 21569351
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    Damian_Max napisał:
    Oo, albo jak pisze @hindoos, po prostu przeskoczyć problem rozwiązując go troche inaczej.


    Zdecydowanie tak.
    To wszystko brzmi jak YX problem.

    _jta_ napisał:
    Próbowałem już programowania na socket-ach w Windows, był jakiś problem, ale poza tym działało.


    Taaaaa .... i sądzisz dorobek w C na Windowsie od ręki (przez cross-kompilację) zadziała na Macu ???

    Dodano po 15 [minuty]:

    _jta_ napisał:
    Użytkownikom nie odpowiada drukowanie do pliku - pokazywałem im, jak to zrobić, to działa, ale oni chcą, żeby z każdej aplikacji wybierało się drukarkę i na niej drukowało, tak im wygodniej.


    Poszukac oferty na jakieś komercyjne "network printing" ze szkoleniem i wsparciem, złożyć szefom ... ktoś zrozumie uwarunkowania.
    Podejrzewam MS Server z domeną, sieć na Windowsach Pro i dostatecznie godne takiego klienta drukarki dadzą kontrolę użytkownika.
  • #19 21569378
    Damian_Max
    Poziom 21  
    Posty: 396
    Pomógł: 40
    Ocena: 96
    ..dawkujesz informacje xD. Z ciekawości, jaki miałeś pomysł na rozwiązanie autoryzacji przy użyciu tej lekkiej aplikacji(?)
    - chciałeś rozdać dane autoryzacyjne + binarkę + instrukcje?
    - czy są użytkownicy drukarki, którzy drukują z telefonu(?) jak oni się autoryzują?
    - czy potrzebujesz tylko zgrubnie logować kto drukuje (by śledzić drogę toneru), czy może chodzi o dokładne monitorowanie; powiązane z bezpieczeństwem drukowanych informacji? (pytanie czy to ma być kuloodporne)
    Bo można połączyć te koncepcje, wystawić udział sieciowy z skryptem drukuj+usuń, a użytkownikom rozdać lekkie aplikacje, których celem jest zarejstrowanie lokalnie drukarki + autoryzacja + przesłanie plików do zbiorczego serwera.
    I ponownie, zbiorczy serwer może być serwerem wydruku / lub udziałem sieciowym.
    Pytam, ponieważ problem z autoryzacją jest złożony, w zależności od oczekiwań, wypada (lub nie) synchronizować dostęp dla konkretnych osób.

    Z drugiej strony, można poszukać, czy na malinkę; nie ma gotowego serwera wydruku z autoryzacją, może zadaj tak konkretne pytanie na stackoverflow (jeśli to by cię satysfakcjonowało).

    W pracy kolega opowiadał, że kiedyś wdrażał system, gdzie jako użytkownik klikasz drukuj i idziesz do dowolnej drukarki, zbliżasz swoją kartę pracowniczą i zaczyna się Twój wydruk. Z tym że rozwiązanie było drogie i on miał dość czasu na wdrożenie i przeszkolenie personelu.

    @_jta_ Daj znać, jeśli chcesz zawrócić dyskusję do pisania aplikacji natywnej (C/C++).
  • #20 21569387
    hindoos
    Poziom 36  
    Posty: 3728
    Pomógł: 287
    Ocena: 656
    Damian_Max napisał:
    Z ciekawości, jaki miałeś pomysł na rozwiązanie autoryzacji przy użyciu tej lekkiej aplikacji

    Jeśli dobrze zrozumiałem, poprzez
    _jta_ napisał:
    Sprawa wygląda tak, że zadanie wydruku musi zawierać jakąś identyfikację użytkownika (jeśli komputer ma tylko jednego użytkownika, to wystarczy identyfikacja komputera, z którego wydruk pochodzi), i głównym problemem jest nie poprawienie wydruku, a ustalenie, czyj on jest - sposób łączności musi to uwzględniać. I jest taka niewygoda, że wiele osób używa Wi-Fi, który łączy się poprzez router-a - dla lokalnej sieci mogę identyfikować po adresie MAC, jeśli to jest komputer osobisty, a przy użyciu protokołu AUTH, jeśli serwer z systemem Linux.
  • #21 21569393
    Damian_Max
    Poziom 21  
    Posty: 396
    Pomógł: 40
    Ocena: 96
    _jta_ napisał:
    Nie mam doświadczenia z MacOS-em, więc nie wiem, jak do tego podejść i nie sądzę. Czy ten system ma automatycznie zainstalowany kompilator C, albo Python-a, albo Tcl-a?

    Tcl wygląda że jest, ale raczej nie jest to przyszłościowe:
    ❯ tclsh --help
    
    WARNING: This version of tcl is included in macOS for compatibility with legacy software.
    In future versions of macOS the tcl runtime will not be available by
    default, and may require you to install an additional package.

    By default niema kompilatora, i chyba nie ma python, obie te rzeczy instalują się wraz z Xcode, choć python3 lepiej zainstalować przez brew.
    Z tym że, to potrzebujesz tylko na maszynie na której będziesz to kompilował / testował, u użytkownika końcowego nie powinno być to potrzebne (python3 warto dołączyć).
    Z drugiej strony, jeśli ilość potencjalnych userów jest skończona i możesz ich 'obskoczyć', to ręczne zainstalowanie python czy czegoś innego to mniej pracy niż gwarantowanie bez-obsługowości.
    Automatycznie zainstalowany jest bash, ruby i AppleScript.
  • #22 21569427
    _jta_
    Specjalista elektronik
    Posty: 48970
    Pomógł: 3207
    Ocena: 4230
    JacekCz napisał:
    Poszukac oferty na jakieś komercyjne "network printing" ze szkoleniem i wsparciem

    Ten sposób został wypróbowany, bez pozytywnego wyniku, proszę o coś innego.

    Damian_Max napisał:
    Bo można połączyć te koncepcje, wystawić udział sieciowy z skryptem drukuj+usuń, a użytkownikom rozdać lekkie aplikacje,

    Tylko jak zrobić te aplikacje? Właśnie o technikę ich robienia od początku pytam.

    Damian_Max napisał:
    Z drugiej strony, można poszukać, czy na malinkę; nie ma gotowego serwera wydruku z autoryzacją

    Rzecz w tym, że serwer nic nie da, jeśli klient nie prześle informacji pozwalającego go zidentyfikować. Jak spowodować to, by przesyłał niezależnie od tego, z jakiej aplikacji drukuje?

    Aha: nie chodzi o to, by było jakoś super zabezpieczone, tylko o to, by identyfikować użytkownika, on i tak potem przykłada kartę do drukarki, ale trzeba, żeby drukarka "wiedziała", które wydruki należą do tego użytkownika.
  • #23 21569464
    Damian_Max
    Poziom 21  
    Posty: 396
    Pomógł: 40
    Ocena: 96
    Hm.. no chyba podobnie jak na windows:
    - w google wpisujesz (po angielsku): "jak skompilować C++ w clang na macOS",
    - w jednym z pierwszych wyników dostajesz: https://stackoverflow.com/questions/9148488/how-do-i-compile-c-with-clang ,
    - z pierwszych komentarzy bierzesz kod aplikacji 'hello-world':
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    - zakładając że masz Xcode, to w terminalu kompilujesz:
    ❯ clang++ test.cc -o test

    - a następnie uruchamiasz:
    ❯ ./test
    sum is 100


    Dołączam ów binarkę, skompilowaną na obie architektury (arm i intel), możesz sprawdzić czy działa na innym macOS bez Xcode (ja takiego nie mam).
    Załączniki:
    • bin.zip (27.73 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #24 21569544
    _jta_
    Specjalista elektronik
    Posty: 48970
    Pomógł: 3207
    Ocena: 4230
    Hm... a skąd clang ma wiedzieć, że binaria mają być do MacOS-a? Czy to trzeba kompilować na MacOS-ie?

    A jeśli na MacOS-ie, to czy clang tam od razu jest z systemem, czy trzeba zainstalować, a jak trzeba, to jak?

    Na Windows coś już kiedyś kompilowałem, na Linux-ie dla Windows chyba też, ale już nic nie pamiętam.
  • #25 21569553
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    _jta_ napisał:
    Rzecz w tym, że serwer nic nie da, jeśli klient nie prześle informacji pozwalającego go zidentyfikować. Jak spowodować to, by przesyłał niezależnie od tego, z jakiej aplikacji drukuje?

    Aha: nie chodzi o to, by było jakoś super zabezpieczone, tylko o to, by identyfikować użytkownika, on i tak potem przykłada kartę do drukarki, ale trzeba, żeby drukarka "wiedziała", które wydruki należą do tego użytkownika.



    Jak zauważył kolega, ciągle ukrywasz.
    Jakie rodzaje tych klientów ?
    Po Wifi ze smartfonów też ? Androidy czy Aplle też ?
    Jakie wersje komputerów ? Windowsy Pro ?
    Lista typów drukarek - otwarta czy zamknięta ?

    Dodano po 17 [minuty]:

    _jta_ napisał:
    Damian_Max napisał:
    a użytkownikom rozdać lekkie aplikacje,


    Rzecz w tym, że kolega się miota. Najpierw jest rzekome żądanie użytkowników, że chcą tylko standardowej drukarki, i nie akceptują żadnej "inności" w dysponowaniu zadań drukowania - potem że jednak zaakceptują ...

    Dodano po 5 [minuty]:

    Damian_Max napisał:
    w google wpisujesz (po angielsku): "jak skompilować C++ w clang na macOS",



    Uważam, że problem z kompilacją jest w granicy dążący do zera - w stosunku do całości projektu.
    W rzeczywistości mityczne "wychwycenie personaliów" (zauwazyliście, nikt nie zapytał "jak?") to zuuuuupełnie inna zabawa na każdym środowisku (nawet Win Home/ Pro)
    Praca nad analizą zaplecza i własnymi założeniami ? Zero, null.
  • #26 21569574
    _jta_
    Specjalista elektronik
    Posty: 48970
    Pomógł: 3207
    Ocena: 4230
    JacekCz napisał:
    Jakie wersje komputerów ? Windowsy Pro ?

    Różne wersje Linux-a, różne wersje Windows, różne wersje MacOS-a - każdy wybiera, jak mu pasuje, nie mam na to wpływu.

    JacekCz napisał:
    Po Wifi ze smartfonów też ? Androidy czy Aplle też ?

    Jak dotąd, nikt mi nie zgłaszał, że chce drukować ze smartfonu. Ale kto wie, może wkrótce ktoś taki się znajdzie.
    (może by o tym nie pisać, bo któryś użytkownik przeczyta i będzie chciał, żeby mu skonfigurować drukowanie ze smartfonu)

    Myślałem o użyciu Samby - serwer może wymagać logowania przy drukowaniu, to by dało identyfikację użytkowników, ale coś mi się kojarzy, że to wycofują (gdzieś chyba o tym czytałem).

    A pod Linux-em zmieniają architekturę CUPS-a - podejrzewam, że nowa wersja nie obsłuży sterowników, których dotąd używaliśmy. A ja bym chciał mieć coś stabilnego...
  • #27 21569589
    Konto nie istnieje
    Poziom 1  
  • #28 21569595
    Damian_Max
    Poziom 21  
    Posty: 396
    Pomógł: 40
    Ocena: 96
    _jta_ napisał:
    Hm... a skąd clang ma wiedzieć, że binaria mają być do MacOS-a? Czy to trzeba kompilować na MacOS-ie?

    Tak jak już pisałem, mimo doświadczenia nie znam rozsądnego sposobu na cross-kompilację, gdzie host to linux/windows, a 'target' to macOS. To co zrobiłem, to zrobiłem to właśnie na hoście, którym jest macOS. I tak jak pisałem, możesz to osiągnąć wirtualką hackintosha, albo przez GH Actions (wtedy microsoft uruchomi Twoje CI, na maszynie z jabłkiem), albo możesz kupić macmini; poczciwe używane na allegro zaczyna się od 400-700zł.

    _jta_ napisał:
    A jeśli na MacOS-ie, to czy clang tam od razu jest z systemem, czy trzeba zainstalować, a jak trzeba, to jak?

    Tak jak pisałem, na macOS potrzebujesz zainstalować Xcode (jak wpiszesz to w google to odrazu się połapiesz o co chodzi). Z tym oprogramowaniem jest dostarczony clang, git, python, i wiele różnego programistycznego software. Xcode jest rozwijany przez Apple.

    JacekCz napisał:
    Uważam, że problem z kompilacją jest w granicy dążący do zera - w stosunku do całości projektu.

    Wiem.. ale później wszyscy mówią, że nie da się tu uzyskać odpowiedzi na swoje pytanie, a mi wyszukanie i skompilowanie tego zajęło pare minut wiec czemu nie.

    _jta_ napisał:
    A ja bym chciał mieć coś stabilnego

    Muszę Cię zmartwić, bo jeśli komputer jest podłączony do internetu, to nie ma czegoś takiego jak długowieczność technologii (którą to chciałoby sie nazywać mianem 'stabilności'). W IT jakieś rozwiązanie stopniowo dojrzewa, rozkwita, aż jest przestarzałe (z różnych powodów) i zastępowane innym.

    @_jta_ Jeśli klienci mogą być mobilny, co cały ów plan idzie w piach.
  • #29 21569604
    hindoos
    Poziom 36  
    Posty: 3728
    Pomógł: 287
    Ocena: 656
    Damian_Max napisał:
    Jeśli klienci mogą być mobilny

    Prawda jest taka, że nikt normalny nie drukuje ze smartfona. Więc tą grupą docelową bym się nie przejmował.
    BTW wciąż nie rozumiem jak taka aplikacja na stacji klienckiej miałaby działać? Monitorować ruch wychodzący i analizować pakiety żeby wyłapać kiedy klient wysyła plik do druku? Robić za wirtualny sterownik drukarki?
  • #30 21569615
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    hindoos napisał:
    Damian_Max napisał:
    Jeśli klienci mogą być mobilny

    BTW wciąż nie rozumiem jak taka aplikacja na stacji klienckiej miałaby działać? Monitorować ruch wychodzący i analizować pakiety żeby wyłapać kiedy klient wysyła plik do druku? Robić za wirtualny sterownik drukarki?


    Dokładnie. mamy "coś" cross kompilować, ale najstarsi Indianie nie wiedzą co.
    Gratuluję pomysłu cros-kompilowanego wirtualnego sterownika drukarki Win/Mac / whatever

Podsumowanie tematu

✨ Dyskusja dotyczy problemu tworzenia lekkiej aplikacji sieciowej w języku C, działającej pod Windows i macOS, z wykorzystaniem cross-kompilacji bez konieczności używania systemu docelowego. Użytkownik poszukuje metody umożliwiającej identyfikację użytkownika drukarki sieciowej oraz poprawę kompatybilności i ergonomii drukowania, unikając instalacji interpreterów skryptowych (Python, Tcl) na maszynach końcowych. Wskazano, że cross-kompilacja dla Windows jest możliwa z użyciem MinGW-w64 lub clang z targetem Windows, natomiast dla macOS realnym rozwiązaniem jest osxcross lub Zig cc/clang z legalnie pozyskanym SDK macOS z Xcode, bądź kompilacja w chmurze (GitHub Actions, Azure, MacStadium). Zalecane jest użycie minimalistycznych bibliotek sieciowych, np. Mongoose lub civetweb, oraz systemów budowania wieloplatformowego jak CMake lub Meson.

Wielu uczestników podkreśla, że cross-kompilacja C pomiędzy Linux, Windows i macOS jest skomplikowana i często praktyczniej jest kompilować natywnie na każdym systemie, np. korzystając z wirtualizacji lub CI/CD. Na macOS do kompilacji potrzebny jest Xcode, który dostarcza clang i inne narzędzia.

W kontekście aplikacji drukującej, rozważano podejście wirtualnego sterownika drukarki, który przesyła zadania do serwera z dodaną identyfikacją użytkownika, jednak jest to skomplikowane i wymaga dużego nakładu pracy. Alternatywnie proponowano scentralizowany serwer wydruku z udziałem SMB, gdzie użytkownicy zapisują pliki PDF do katalogów sieciowych, a serwer monitoruje foldery i realizuje zadania drukowania z logowaniem użytkowników. Samba jest wskazywana jako popularne rozwiązanie serwera plików i drukowania na Linuxie, choć konfiguracja wymaga aktualizacji i znajomości.

Wskazano, że w przeglądarkowym JavaScript nie ma możliwości otwarcia surowych portów TCP, co ogranicza zastosowanie do HTTP/WebSocket i wymaga pośredniczącego serwera. Lua z LuaJIT jest polecany jako lekki interpreter do osadzania w aplikacji C, oferujący dobrą wydajność i integrację.

Podsumowując, brak jest prostych recept na cross-kompilację lekkiej aplikacji sieciowej w C dla Windows i macOS bez dostępu do systemu docelowego, a praktyczne rozwiązania to kompilacja natywna, użycie CI/CD lub zakup sprzętu Apple do kompilacji. W zakresie drukowania rekomendowane jest wykorzystanie scentralizowanego serwera SMB z monitorowaniem folderów i autoryzacją użytkowników, co jest bardziej stabilne i wykonalne niż próby tworzenia wirtualnych sterowników wieloplatformowych.
Wygenerowane przez model językowy.
REKLAMA