-
1. Data: 2012-01-03 15:22:21
Temat: czemu: jeden system + różne kompilatory = problem?
Od: Szyk <s...@o...pl>
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?
Gdzie jest słaby punkt specyfikacji? Czy standard C++ jest nie
precyzyjny? Czy może standard plików DLL jest nie precyzyjny?
Czy są takie systemy operacyjne w których programy (i biblioteki
współdzielone) kompilowane różnymi kompilatorami C++ są ze sobą
kompatybilne?
dzięki i pozdro
Szyk
-
2. Data: 2012-01-03 15:46:41
Temat: Re: czemu: jeden system + różne kompilatory = problem?
Od: Wojciech Jaczewski <w...@o...pl>
Szyk wrote:
> Dlaczego programy i biblioteki skompilowane różnymi kompilatorami C++
> nie są ze sobą kompatybilne?
>
> Gdzie jest słaby punkt specyfikacji? Czy standard C++ jest nie
> precyzyjny? Czy może standard plików DLL jest nie precyzyjny?
Standard C++ dotyczy kod źródłowego, natomiast nie opisuje jaką dokładnie
postać binarki ma utworzyć kompilator.
Bywa, że twórcy kompilatorów umówią się na takie samo ABI, ale standard tego
nie wymaga.
-
3. Data: 2012-01-03 15:51:41
Temat: Re: czemu: jeden system + różne kompilatory = problem?
Od: Paweł Kierski <n...@p...net>
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
-
4. Data: 2012-01-03 16:47:11
Temat: Re: czemu: jeden system + różne kompilatory = problem?
Od: Adam Przybyla <a...@r...pl>
In pl.comp.programming Szyk <s...@o...pl> wrote:
> 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?
>
> Gdzie jest słaby punkt specyfikacji? Czy standard C++ jest nie
> precyzyjny? Czy może standard plików DLL jest nie precyzyjny?
>
> Czy są takie systemy operacyjne w których programy (i biblioteki
> współdzielone) kompilowane różnymi kompilatorami C++ są ze sobą
> kompatybilne?
... oczywiscie, pod kazdym Linuksem. Z powazaniem
Adam Przybyla
-
5. Data: 2012-01-03 17:12:08
Temat: Re: czemu: jeden system + różne kompilatory = problem?
Od: Szyk <s...@o...pl>
>> 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.
Czyli wzorzec fabryka obiektów się kłania?
-
6. Data: 2012-01-03 17:17:17
Temat: Re: czemu: jeden system + różne kompilatory = problem?
Od: Szyk <s...@o...pl>
>> Czy są takie systemy operacyjne w których programy (i biblioteki
>> współdzielone) kompilowane różnymi kompilatorami C++ są ze sobą
>> kompatybilne?
> ... oczywiscie, pod kazdym Linuksem. Z powazaniem
> Adam Przybyla
Czy to wynika z faktycznie lepszego rozwiązania technicznego (np.
standard Elf jest lepiej zdefiniowany niż microsoftowy PE?)?
Czy może wynika to z faktu, że mamy tam tylko narzędzia GNU i gdyby użyć
jakiegokolwiek innego kompilatora, to byśmy mieli takie same jazdy jak
pod Widnows?
-
7. Data: 2012-01-03 17:21:00
Temat: Re: czemu: jeden system + różne kompilatory = problem?
Od: Roman W <b...@g...pl>
On Tuesday, January 3, 2012 4:47:11 PM UTC, Adam Przybyla wrote:
> ... oczywiscie, pod kazdym Linuksem.
Nieprawda: http://gcc.gnu.org/gcc-3.2/c++-abi.html
RW
-
8. Data: 2012-01-03 17:23:47
Temat: Re: czemu: jeden system + różne kompilatory = problem?
Od: Edek <e...@g...com>
On 01/03/2012 06:17 PM, Szyk wrote:
>
>>> Czy są takie systemy operacyjne w których programy (i biblioteki
>>> współdzielone) kompilowane różnymi kompilatorami C++ są ze sobą
>>> kompatybilne?
>
>> ... oczywiscie, pod kazdym Linuksem. Z powazaniem
>> Adam Przybyla
>
> Czy to wynika z faktycznie lepszego rozwiązania technicznego (np.
> standard Elf jest lepiej zdefiniowany niż microsoftowy PE?)?
>
> Czy może wynika to z faktu, że mamy tam tylko narzędzia GNU i gdyby użyć
> jakiegokolwiek innego kompilatora, to byśmy mieli takie same jazdy jak
> pod Widnows?
Nie mamy tam tylko narzędzi GNU.
Edek
-
9. Data: 2012-01-03 17:39:18
Temat: Re: czemu: jeden system + różne kompilatory = problem?
Od: Wojciech Jaczewski <w...@o...pl>
Szyk wrote:
>
>>> Czy są takie systemy operacyjne w których programy (i biblioteki
>>> współdzielone) kompilowane różnymi kompilatorami C++ są ze sobą
>>> kompatybilne?
>
>> ... oczywiscie, pod kazdym Linuksem. Z powazaniem
>> Adam Przybyla
>
> Czy to wynika z faktycznie lepszego rozwiązania technicznego (np.
> standard Elf jest lepiej zdefiniowany niż microsoftowy PE?)?
Standard Elf nijak przed tym nie chroni. Po prostu tak się szczęśliwie
składa, że niektóre kompilatory tworzą binarki zgodne ze sobą.
Był taki czas - jeśli dobrze pamiętam - przejście z gcc w wersji 3.x na gcc
w wersji 4.x, gdy nie było zgodności między bibliotekami C++ (czyste C -
jeśli dobrze pamiętam - nie miało problemów zgodności) utworzonymi wersją
3.x a 4.x.
> Czy może wynika to z faktu, że mamy tam tylko narzędzia GNU i gdyby użyć
> jakiegokolwiek innego kompilatora, to byśmy mieli takie same jazdy jak
> pod Widnows?
Kompilator Clang tworzy binarki zgodne z binarkami utworzonymi przez gcc
4.x. Innych kompilatorów nie używam, ale sądzę że intelowski też robi
zgodne.
-
10. Data: 2012-01-03 20:06:38
Temat: Re: czemu: jeden system + ró?ne kompilatory = problem?
Od: A.L. <l...@a...com>
On Tue, 3 Jan 2012 16:47:11 +0000 (UTC), Adam Przybyla
<a...@r...pl> wrote:
>In pl.comp.programming Szyk <s...@o...pl> wrote:
>> 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?
>>
>> Gdzie jest słaby punkt specyfikacji? Czy standard C++ jest nie
>> precyzyjny? Czy może standard plików DLL jest nie precyzyjny?
>>
>> Czy są takie systemy operacyjne w których programy (i biblioteki
>> współdzielone) kompilowane różnymi kompilatorami C++ są ze sobą
>> kompatybilne?
> ... oczywiscie, pod kazdym Linuksem. Z powazaniem
> Adam Przybyla
Echem.... Ja uzywam pewnego komercjalnego oprogramwoania. Platne, 5
cyfrowo w dolarach. Maja 5 roznych wersji binarow na rozne Linuksy. Na
ten sam pecet
A.L.