Autor Wątek: Kompilacja aplikacji pod linuxem  (Przeczytany 3818 razy)

Offline wrobelbiz

  • Użytkownik

# Czerwiec 01, 2011, 10:46:14
Witam.

Moje pytanie będzie w miarę krótkie, lecz na początek trochę wyjaśnienia.
Moja aplikacja była pisana pod Windowsem, dokładnie w Visual Studio 6.0.
Jest to aplikacja konsolowa.

Zrobiłem sobie #define WINDOWS_APP i używałem wszędzie tam, gdzie są typowo windowsowe funkcje, a #else przy linuxowych. Program w windowsie kompiluje się i uruchamia poprawnie, do jego pracy nie mam zastrzeżeń. Niestety z linuxem już nie jest tak różowo.

Kompilowałem za pomocą g++, komenda:
g++  -O3 -o GateServer Global.h MessageIndex.h NetMessages.h XSocket.h XSocket.cpp PartyManager.h PartyManager.cpp Client.h Client.cpp Gate.h Gate.cpp main.cpp
utworzony został plik GateServer (tak jak chciałem, skompilowało się).
Nadałem mu chmod 0777 (bo pisało permission denied).

Po próbie otwarcia aplikacji (./GateServer) następują dziwne błędy:


O co tu może chodzić? Potrzebuję informacji jakie funkcje używane pod windowsem mogą być jeszcze niekompatybilne z linuxem. Chodź w sumie program skompilował się :|
A może jakoś inaczej to trzeba kompilować?


Pozdrawiam.
wrobelbiz

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline lgromanowski

  • Użytkownik
    • OpenMW, Elderscrolls III: Morrowind engine reimplementation

# Czerwiec 01, 2011, 10:59:34
O co tu może chodzić? Potrzebuję informacji jakie funkcje używane pod windowsem mogą być jeszcze niekompatybilne z linuxem. Chodź w sumie program skompilował się :|
A może jakoś inaczej to trzeba kompilować?

Pozdrawiam.
wrobelbiz

W oknie konsoli linuksowej wpisz:
Cytuj
file nazwa_skompilowanej_binarki

Jeśli na początku pojawi się coś innego niż:

Cytuj
nazwa_binarki: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), ...

to znaczy, że źle skompilowałeś (może użyłeś gcc/g++ ale skompilowałeś jako win32/pe?).

proszę nie cytować obrazków -Xirdus
« Ostatnia zmiana: Czerwiec 04, 2011, 19:49:55 wysłana przez Xirdus »

Offline wrobelbiz

  • Użytkownik

# Czerwiec 01, 2011, 11:56:50
//Edit:

Udało się, pojawiło się:
GateServer: ELF 32-bit executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped.
Dziekuję za pomoc ;)
« Ostatnia zmiana: Czerwiec 01, 2011, 12:02:04 wysłana przez wrobelbiz »

Offline Nargil

  • Użytkownik
    • projekty

# Czerwiec 01, 2011, 14:19:12
Nie kompiluje się nagłówków. Nagłówki includujesz w cpp. Kompilujesz samo cpp.

Offline lgromanowski

  • Użytkownik
    • OpenMW, Elderscrolls III: Morrowind engine reimplementation

# Czerwiec 01, 2011, 20:34:50
Nie kompiluje się nagłówków.

Kompiluje się: gcc precompiled headers (w vc++ jest stdafx.h jeśli dobrze pamiętam) ;-)

Offline wrobelbiz

  • Użytkownik

# Czerwiec 02, 2011, 09:23:11
Ja kompiluję, tylko dodałem opcje -w i teraz ładnie widać same błędy.
Gdy jest 0 błędów dostaję w końcu mój program.

Offline Kos

  • Użytkownik
    • kos.gd

# Czerwiec 02, 2011, 19:21:44
Nie kompiluje się nagłówków.

Kompiluje się: gcc precompiled headers (w vc++ jest stdafx.h jeśli dobrze pamiętam) ;-)

Super ciekawostka, ale nie mieszajmy. Kompiluje się jednostki translacji (jednostkę translacji tworzy plik .cpp wraz z includami), a nagłówki się najwyżej prekompiluje (podstawową różnicą między kompilacją a prekompilacją jest to, co jest jej wynikiem).