C++ Builder XE3 i programy (DLL-ki) 64-bitowe

dział ogólny

C++ Builder XE3 i programy (DLL-ki) 64-bitowe

Nowy postprzez andrus » wtorek, 5 lutego 2013, 17:57

Witam

Ostatnio testuję najnowszy C++ Builder XE3 (UPDATE 2) w kwestii budowania 64-bitowych bibliotek DLL.
Oto przykład działania kompilatora C++Builder XE3 dotyczący ww. tematu (porównanie wg. wielkości generowanego kodu):

1) Prosta biblioteka DLL. Ma ona zero zaimplementowanych funkcji - generuje kod o długości ok. 20 - 60 KB dla Windows 32-bit.
2) Ta sama biblioteka wygenerowana dla Windows 64-bit ma długość ok. 3,6 MB (szok!).
Samo dodanie deklaracji #include <windows.h> jest sprawcą tego "zamieszania".

Próbowałem różnych ustawień kompilatora. ZERO efektów w względzie długości/optymalizacji kodu 64-bitowego.
Uwaga: C++ Bulder XE3 zainstalowany został na PC z Win'7 32-bit.

Ew. czekam na Wasze uwagi i doświadczenia, bo sam ostatecznie zwątpiłem w Embarcadero i C++ Builder.

Pozdrawiam
Andrzej
Avatar użytkownika
andrus
Bladawiec
Bladawiec
 
Posty: 9
Dołączył(a): piątek, 7 grudnia 2012, 06:09
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Internet Explorer 9

Re: C++ Builder XE3 i programy (DLL-ki) 64-bitowe

Nowy postprzez polymorphism » wtorek, 5 lutego 2013, 19:34

Przed dodaniem windows.h zdefiniuj WIN32_LEAN_AND_MEAN.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: C++ Builder XE3 i programy (DLL-ki) 64-bitowe

Nowy postprzez andrus » środa, 6 lutego 2013, 08:03

Dzięki, ale #define WIN32_LEAN_AND_MEAN przed #include <windows.h> przyspiesza tylko troszeczkę kompilację,
natomiast nie ma najmniejszego wpływu na długość wygenerowanego kodu.
Nadal "pusta" biblioteka 64-bitowa zbudowana w C++ Builder XE3 ma długość 3,6 MB.
Avatar użytkownika
andrus
Bladawiec
Bladawiec
 
Posty: 9
Dołączył(a): piątek, 7 grudnia 2012, 06:09
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Internet Explorer 9

Re: C++ Builder XE3 i programy (DLL-ki) 64-bitowe

Nowy postprzez polymorphism » środa, 6 lutego 2013, 11:10

Dla uściślenia: mowa o wersji release, a nie debug, tak?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: C++ Builder XE3 i programy (DLL-ki) 64-bitowe

Nowy postprzez andrus » środa, 6 lutego 2013, 12:52

Tak, chodzi o "release", a opcja "Link with Dynamic RTL" jest ustawiona na FALSE.
A ciało "biblioteki" wygląda tak:

KOD cpp:     UKRYJ  
#include <windows.h>
extern "c" _libmain((unsigned long reason)
{
  return 1;
}


Przestawienie opcji "Link with Dynamic RTL" na TRUE zmniejsza bibiotekę 64-bitową do ok. 10KB,
ale co z tego, jeżeli trzeba do niej dołączyć "stado" jeszcze większych bibliotek systemowych zewnętrznych
i dopiero taki cały majdan przekazać do użytkownika.
Ostatnio edytowano środa, 6 lutego 2013, 13:17 przez polymorphism, łącznie edytowano 1 raz
Powód: Taguj kod!
Avatar użytkownika
andrus
Bladawiec
Bladawiec
 
Posty: 9
Dołączył(a): piątek, 7 grudnia 2012, 06:09
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Internet Explorer 9

Re: C++ Builder XE3 i programy (DLL-ki) 64-bitowe

Nowy postprzez polymorphism » środa, 6 lutego 2013, 13:29

A to widzisz, problemem są runtime'y, a nie nagłówek windows.h. Być może wersja 32-bitowa "inteligentniej" konsoliduje statyczne biblioteki, i dlatego binarka jest taka mała.

Chyba niewiele tu zrobisz.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: C++ Builder XE3 i programy (DLL-ki) 64-bitowe

Nowy postprzez beherit » środa, 13 lutego 2013, 22:43

Miałem zapytać na forum dokładnie o to samo. U mnie problem jest na tyle duży, że biblioteki wraz z formami VCL warzą 15MB, gdzie odpowiednik 32-bitowy waży 3 razy mniej. Problem jest na tyle dziwny, że kompilacja "czystej" DLLki x64 w Delphi (również w XE3) generuje bardzo mały plik (parę KB). Było by fajnie jakby komuś udało się odchudzić 64-bitowe biblioteki i napisał sposób jak to uczynić.
Obrazek
Avatar użytkownika
beherit
Homos antropiczny
Homos antropiczny
 
Posty: 62
Dołączył(a): poniedziałek, 16 lutego 2009, 19:55
Lokalizacja: Jarocin
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: C++Builder XE5
Gadu Gadu: 0
    Windows 7Firefox

Re: C++ Builder XE3 i programy (DLL-ki) 64-bitowe

Nowy postprzez beherit » czwartek, 14 lutego 2013, 10:24

To jest błąd po stronie kompilatora, został już zgłoszony nawet w QC we wrześniu zeszłego roku. Oczywiście problem zlewany... Po prostu linker nie wiadomo dlaczego dodaje dużo bzdur kompilując aplikację 64-bitową.
Obrazek
Avatar użytkownika
beherit
Homos antropiczny
Homos antropiczny
 
Posty: 62
Dołączył(a): poniedziałek, 16 lutego 2009, 19:55
Lokalizacja: Jarocin
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: C++Builder XE5
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 39 gości