/ / Wielokrotne łączenie pojedynczego pliku obiektu między platformami? - c ++, c, linker, cross-platform

Łączenie wielu razy pojedynczego pliku obiektu platformy krzyżowej? - c ++, c, linker, wieloplatformowy

Jeśli skompiluję wieloplatformowy fragment kodu do pliku obiektowego, czy będzie można użyć linkera do utworzenia oddzielnych plików wykonywalnych zależnych od platformy (.exe, .bin) z tego pojedynczego pliku binarnego?

EDYCJA: Wygląda na to, że odpowiadający naprawdę nie rozumieją mojego pytania. Pytam, czy możesz użyć obiektu wieloplatformowego i wygenerować z niego zależne od platformy pliki wykonywalne.

Odpowiedzi:

1 dla odpowiedzi № 1

To w dużej mierze zależy wyłącznie od linkera i innych narzędzi programistycznych. Z pewnością krzyż kompilacja jest możliwe w zaawansowanym środowisku, takim jak gcc, gdzie możesz wygenerować kod obiektowy dla różnych architektur.

Ale pakowanie wszystkich inna architektura obiekty w jednym pliku wykonywalnym nie są czymś, w czym kiedykolwiek widziałem gcc.

Widziałem duże pliki binarne na platformach Apple(gdzie plik wykonywalny działałby na starych komputerach Mac 68K lub nowszych PowerPC), ale tak naprawdę nigdy nie byłem ich wielkim fanem, a Apple miał całkowitą kontrolę nad środowiskiem.

Ponadto kod modułu ładującego (część systemu operacyjnegozwykle) musi być w stanie wykryć, którą architekturę powinien wyodrębnić i uruchomić z takiego grubego pliku binarnego (tutaj przydała się kontrola Apple - mogli modyfikować różne systemy operacyjne, aby wykryć i załadować poprawną wersję).

Osobiście uważam, że lepiej ci będzieużywając przenośnego języka (Java, Perl, Python i in.) lub pakując aplikację do różnych plików binarnych - zawsze możesz użyć jednego z doskonałych wieloplatformowych narzędzi instalacyjnych do zainstalowania poprawnej wersji.


Na podstawie Twojej edycji wyjaśniającej pytanie: tak. Jeśli… obiekt pliki są naprawdę wieloplatformowe, będą działaćwszystkie te platformy. Tak więc, z definicji, możesz na tej podstawie zbudować specyficzny dla platformy plik wykonywalny. Zauważ, że to nie to samo, co kompilowanie niektórych platform kod źródłowy ponieważ sam proces kompilacji najprawdopodobniej zablokuje go na określonej platformie.

I znowu zależy to od zastosowanego łańcucha narzędzi (kompilator, linker, moduł ładujący itp.).


1 dla odpowiedzi nr 2

Tłuszczowe pliki binarne powinny być obsługiwane również w systemie Linux, jednak nigdy nie próbowano.

Strona FatELF mówi, że obsługują biblioteki statyczne i dynamiczne, ich FAQ jest obszerna.