eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingczemu: jeden system + różne kompilatory = problem? › Re: czemu: jeden system + różne kompilatory = problem?
  • Data: 2012-01-03 15:51:41
    Temat: Re: czemu: jeden system + różne kompilatory = problem?
    Od: Paweł Kierski <n...@p...net> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2012-01-03 16:22, Szyk pisze:
    > Witam
    >
    > W systemie Windows można spotkać różne kompilatory C++. Np. Visual i
    > GNU. Kompilują one programy w postaci exe lub dll. A zatem:
    >
    > Dlaczego programy i biblioteki skompilowane różnymi kompilatorami C++
    > nie są ze sobą kompatybilne?

    Manglowanie nazw, zarządznie stertą.

    Oba te problemy można z resztą spotkać używając jednego kompilatora. Na
    pewno da się na to nadziać w Visualu.

    Dla manglowania nazw wystarczy eksportować, bez extern "C", funkcję:

    wchar_t widen(char c);

    i skompilować jeden moduł z opcją /Zc:wchar_t a drugi z /Zc:wchar_t-.
    W pierwszym przypadku wchar_t będzie traktowany jako typ wbudowany
    i manglowany do innej literki, niż w drugim przypadku (gdzie wchar_t
    jest traktowany jak alias na unsigned short).

    Druga kategoria problemów - namieszać z opcjami /MT i /MD (multithread
    i multithread DLL) oraz "okolicznymi" odpowiedzialnymi za rodzaj
    linkowanej biblioteki run-time. Do tego przekazywać między modułami
    obiekty std::string (lub dowolne inne wewnętrznie alokujące pamięć).

    > Gdzie jest słaby punkt specyfikacji? Czy standard C++ jest nie
    > precyzyjny? Czy może standard plików DLL jest nie precyzyjny?

    C++ nie mówi nic o postaciach binarnych. O modułach dynamicznie
    ładowanych/dzielonych też nie.

    > Czy są takie systemy operacyjne w których programy (i biblioteki
    > współdzielone) kompilowane różnymi kompilatorami C++ są ze sobą
    > kompatybilne?

    Najlepiej przyjąć, że najmniejszym wspólnym mianownikiem jest interfejs
    typu C. Do tego każde zwolnienie zasobów powinno nastąpić w tym module,
    w którym zostały zaalokowane. Wtedy ma duże szansę zagrać bez względu
    na kompilator.

    --
    Paweł Kierski
    n...@p...net

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: