eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingczemu: jeden system + różne kompilatory = problem? › Re: czemu: jeden system + różne kompilatory = problem?
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Paweł Kierski <n...@p...net>
    Newsgroups: pl.comp.programming,pl.comp.lang.c
    Subject: Re: czemu: jeden system + różne kompilatory = problem?
    Date: Tue, 03 Jan 2012 16:51:41 +0100
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 46
    Message-ID: <jdv86e$kf9$1@inews.gazeta.pl>
    References: <jdv6hd$mrq$1@mx1.internetia.pl>
    NNTP-Posting-Host: 195.182.34.201
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1325605902 20969 195.182.34.201 (3 Jan 2012 15:51:42 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Tue, 3 Jan 2012 15:51:42 +0000 (UTC)
    X-User: pkierski
    In-Reply-To: <jdv6hd$mrq$1@mx1.internetia.pl>
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.25) Gecko/20111213
    Lightning/1.0b2 Thunderbird/3.1.17
    Xref: news-archive.icm.edu.pl pl.comp.programming:194602 pl.comp.lang.c:297520
    [ ukryj 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: