Entwickler-Ecke

Off Topic - [C++ Builder] Compiler (geklärt) VORTEILE C++


Nano-Ware - Di 27.04.10 16:37
Titel: [C++ Builder] Compiler (geklärt) VORTEILE C++
Hey,

ich bin noch ziemlicher Anfänger... ich hab jetzt ein neues C++ Projekt erstellt, bei dem auch nur die Standartkomponenten verwendet werden, die im C++ Builder 2010 enthalten sind. Ich habe jetzt rechts die "Build - Optionenen" auf "Release" gestellt und bin dann auf "Projekt erstellen" dann hab ich die exe aus dem "Release" Ordner genommen und einem Freund gegeben der Windows XP hat. Dann kam beim Starten diese Meldung:

"Die Anwendung konnte nicht gestartet werden, weil rtl140.bpl nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben"

okay ich such fließig im Internet und find heraus, dass die Datei wohl etwas mit den Laufzeitpackages zu tun hat.. Also entferne ich den Haken in den Optionen. Wenn man das Programm jetzt startet, kommt wieder einen Meldung:

"Die Anwendungkonnte nicht gestartet werden, weil BORLNDMM.DLL nicht gefunden wurde.Neuinstallation....."

Mein Ziel ist es, einen eigenständige EXE zu haben, also ohne DLLs oder bpls^^


MfG Nano-Ware

UND SCHONMAL VIELEN LIEBEN DANK

(Fals das nicht ein altägliches Problem ist, ich bin auch in Skype erreichbar mit dem Namen "Cubysoft")


BenBE - Di 27.04.10 20:20

BorlandMM ist der Speichermanager von Delphi. Schau mal, ob Du irgendwo ShareMem eingebunden hast, bzw. irgendwas in die Richtung.

Ansonsten einfach besagte DLL aus dem Delphi-Ordner mitgeben.


Nano-Ware - Di 27.04.10 21:52

Okay dann nochmal ganz genau.. ich konnte da leider nichts finden:

Quellcode des Projekts:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
USEFORM("Forms\Main.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
  try
  {
    Application->Initialize();
    Application->MainFormOnTaskBar = true;
    Application->CreateForm(__classid(TForm1), &Form1);
    Application->Run();
  }
  catch (Exception &exception)
  {
    Application->ShowException(&exception);
  }
  catch (...)
  {
    try
    {
      throw Exception("");
    }
    catch (Exception &exception)
    {
      Application->ShowException(&exception);
    }
  }
  return 0;
}
//---------------------------------------------------------------------------



Main.cpp:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------



und Main.h:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
//---------------------------------------------------------------------------

#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ToolWin.hpp>
#include <ImgList.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:  // IDE-verwaltete Komponenten
  TToolBar *TOOL_Sidebar;
  TToolButton *TOOLBTN_Server;
  TImageList *ILST_Tee;
  TToolButton *TOOLBTN_Worlds;
  TPanel *PAN_Server;
  TToolBar *ToolBar1;
  TToolButton *ToolButton1;
  TToolButton *ToolButton2;
  TMainMenu *MENUE_M;
  TMenuItem *Datei1;
private:  // Benutzer-Deklarationen
public:    // Benutzer-Deklarationen
  __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Nano-Ware - Mi 28.04.10 21:39

Nochmal ein kleiner PUSHUP... Ich brauch wirklich Hilfe... bitte ;D morgen könntet ihr mir wenn ihr das wollt auch per Teamviewer helfen... schonmal Danke


Xentar - Mi 28.04.10 22:11

Dir wurd doch schon vorgeschlagen, einfach die DLL mit zu liefern?


Nano-Ware - Mi 28.04.10 22:50

Ich weiß.. das Problem ist nunmal, dass ich erstens nicht weiß, ob ich die DLL überhaupt mitliefern darf und 2. ist das eine portable Anwendung... deshalb sollte möglichst keine DLL vorhanden sein...


Xentar - Mi 28.04.10 22:55

Dann tipp halt mal den Dateinamen in Google ein, und probier die Tipps dort aus..

Zitat:
Du solltest das Programm statisch Kompilieren.

Probier mal Folgendes:
BCB starten -> Projekt laden -> Projekt -> Optionen
-> Packages -> häckchen bei "Mit Laufzeit-Packages compilieren" rausnehmen -> Linker -> häckchen bei " Dynamische RTL verwenden" rausnehmen.

Speichern und neu Kompilieren.

Du solltest jetzt feststellen das die fertige exe Datei erheblich größer ist,
dafür benötigst du jetzt aber keine Bibliotheken mehr.


Edit:
Danach das Projekt neu erstellen, nicht einfach nur mit F9 kompilieren.


Nano-Ware - Mi 28.04.10 23:21

Also ich werde das morgen testen, die Laufzeitpackages hatte ich schon deaktiviert, da ich das schon in Google gefunden hatte... Vielen Dank schoneinmal ;D

@Off Topic Was ist dieses RTL?


finalizat0r - Mi 28.04.10 23:54

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
@Off Topic Was ist dieses RTL?


Runtime Library wenn ich das richtig sehe ^^

Gruß


Delphi-Laie - Do 29.04.10 00:28

Der C++-Builder ist diesbezüglich anders als Delphi voreingestellt. Meine Recherchen ergaben:

Project->Options->Packages->Build with runtime packages (oder: Projekt->Optionen->Packages->Mit Laufzeitpackages compilieren): abschalten,
Project->Options->Linker->Use dynamic RTL (oder: Projekt->Optionen->Linker->Dynamische RTL verwenden): abschalten.

Eine mit solchen Einstellungen erhaltene Exe müßte "nativ" sein, ist allerdings deutlich größer als ein Delphi-Compilat.


Nano-Ware - Do 29.04.10 06:39

Ja das stimmt ;) ich werde heute Nachmittag alles testen... Danke ;)


EDIT:// Ich bin ja auf C++ umgestiegen, weil so gut wie alle gesagt haben, dass das besser sei. Ist das überhaupt so, bzw in was ;)


Tastaro - Do 29.04.10 08:29

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
Ja das stimmt ;) ich werde heute Nachmittag alles testen... Danke ;)


EDIT:// Ich bin ja auf C++ umgestiegen, weil so gut wie alle gesagt haben, dass das besser sei. Ist das überhaupt so, bzw in was ;)


Die Aussage "Programmiersprache A ist besser als Programmiersprache B" geht pauschal gar nicht. Man kann sie höchstens für einzelne Anwendungsfälle bzw. Anwendungsgebiete treffen. Für Programmieranfänger halte ich persönlich C++ für nicht so optimal. Da finde ich Delphi geeigneter.

Beste Grüße


Delphi-Laie - Do 29.04.10 11:55

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
Ja das stimmt ;) ich werde heute Nachmittag alles testen... Danke ;)


EDIT:// Ich bin ja auf C++ umgestiegen, weil so gut wie alle gesagt haben, dass das besser sei. Ist das überhaupt so, bzw in was ;)


Zumindest in den Optionen läßt sich die Codegenerierung subtiler einstellen, ist also dem Delphi-Compiler überlegen. Auch die DLL-Hostprogramm-Interaktion soll überlegen sein.

Allerdings halte ich die Delphi-Syntax für bequemer, und so ist Delphi durchaus besser als Einstiegssprache geeignet.


Nano-Ware - Do 29.04.10 14:56

Was ist denn jetzt grundsätzlich besser an der Sprache C++? Welche Vorteile, logischer? ;D


elundril - Do 29.04.10 15:02

Teilweise Maschienennäher, generizität wird unterstützt (was Delphi aber seit D2009 auch kann), gute Freeware-Compiler, ISO-genormt soweit ich weiß, manche sagen es ist schneller, usw. Aber in Google findest du sicher n haufen sachen darüber.

lg elundril


Jakob_Ullmann - Do 29.04.10 16:37

user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Zumindest in den Optionen läßt sich die Codegenerierung subtiler einstellen, ist also dem Delphi-Compiler überlegen. Auch die DLL-Hostprogramm-Interaktion soll überlegen sein.

Allerdings halte ich die Delphi-Syntax für bequemer, und so ist Delphi durchaus besser als Einstiegssprache geeignet.


Also mit der ersten Aussage gehe ich nicht mit. Ich denke, man sollte klar unterscheiden zwischen Sprache und Compiler, zumal Embarcadero C++ nun wirklich nicht als Bezugspunkt gewählt werden kann. C++ ist nicht wirklich als Einsteigersprache geeignet, da kann nichts herauskommen! Aber ich halte C++ schon für sehr viel flexibler als Delphi. Es ist eben nicht an einen bestimmten Compiler oder eine bestimmte Firma gebunden, irgendeinen Compiler gibt es garantiert für jede Plattform. Für professionelle Softwareentwicklung dürfte Lazarus (noch :wink: ) keine wirkliche Relevanz haben und man ist so ziemlich an Embarcadero gebunden.

Ich finde die C++ Syntax wesentlich übersichtlicher als die von Delphi, aber man kann ein C++ Programm auch richtig schön unübersichtlich schreiben. Aber dass das auch mit Delphi geht, beweisen täglich Threads von Anfängern, die noch nie irgendetwas von Einrückung und sowas gehört haben.