Use Dynamic RTL i Linker Error CP32mt.lib

problemy z funkcjonowaniem bibliotek, komponentów itp.

Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Lamek » sobota, 19 grudnia 2009, 03:43

Witam :)

Jestem amatorem programowania, ale swój pierwszy program mam już za sobą :P Jednak, gdy odznaczam opcję "Use Dynamic RTL" program nie kompiluje się i wychodzi error: "[Linker Error] 'D:\Borland\CBuilder6\Lib\CP32MT.LIB' contains invalid omf record, type 0x53." Podczas tworzenia programu wyskakiwał mi błąd, o którym czytałem w google i gdzieś poradzili zainstalować właśnie cp32mt.lib do komponentów, co też uczyniłem, jednak mi to nie pomogło i inaczej obszedłem ów błąd. Jednak program już skończyłem i chciałem go wypróbować na innym PC, a tu zonk :( Ktoś się orientuje co mogę robić źle lub jakie pliki są potrzebne razem z programem, by ten chadzał ? :)

pozdrawiam serdecznie
Lamek
Avatar użytkownika
Lamek
Bladawiec
Bladawiec
 
Posty: 7
Dołączył(a): sobota, 19 grudnia 2009, 03:35
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 6
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Cyfrowy Baron » sobota, 19 grudnia 2009, 10:09

To wszystko niewiele a wręcz prawie nic nie mówi o problemie. Biblioteki *.LIB z reguły są potrzebne do połączenia się programu z konkretną biblioteką DLL, powinna jednak być do tego jeszcze jakaś biblioteka w rodzaju *.H, *.HPP, *.PAS.
Biblioteki *.LIB zawierają tylko deklaracje funkcji, więc potrzebujesz jeszcze jakieś biblioteki zawierającej implementacje tych funkcji.

Co się tyczy cp32mt.lib to jest to wielowątkowa statyczna biblioteka zgodności VCL z C RTL, nie wiem jak to inaczej ująć w słowa.

Problemem nie jest ta biblioteka tylko pewnie jakiś niestandardowy komponent, który zastosowałeś w swoim programie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Lamek » sobota, 19 grudnia 2009, 13:08

Kod: Zaznacz cały
#include <vcl.h>
#include <conio.h>
#include <iostream>
#include <string>
#include <stdio.h>
#include <fstream.h>
using namespace std;
#pragma hdrstop

#include "srednia1.h"
//---------------------------------------------------------------------------
#pragma argsused
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;


a potem mam funkcje takie jak:

Kod: Zaznacz cały
int h = Application->MessageBoxA("Czy napewno chcesz zrestartowac program ?", "Uwaga",mbNo);

        if(h==1)

        {

Application->Terminate();

Sleep(200);

ShellExecute(Application->Handle, "open", Application->ExeName.c_str(), "-r", "", SW_SHOW);


i

Kod: Zaznacz cały
WinHelp(0,"Help.HLP",HELP_CONTENTS,0);


i

Kod: Zaznacz cały
struct Baza
{
float a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t;
float a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,r1,s1,t1;
int ocena, cmb;
};


i

Kod: Zaznacz cały
char x[30],y[30];

strcpy(x, Edit1->Text.c_str());
strcpy(y, Edit2->Text.c_str());

SaveDialog->Filter = "DATA Files (*.dat)|*.dat|";
SaveDialog->FileName = (Edit2->Text)+" "+(Edit1->Text)+" "+(ComboBox1->Text);

   if( SaveDialog->Execute() )
   {
      FSave = fopen(SaveDialog->FileName.c_str(), "w");
        }

nazwa = ( SaveDialog->FileName.c_str() );

Baza Hard;

Hard.cmb = ComboBox1->ItemIndex;
itd.
Hard.t1 = StrToFloat(StringGrid2->Cells[0][19]);

fstream outfile;
outfile.open(nazwa.c_str(), ios::out | ios::binary);
outfile.write((char *)&Hard, sizeof(Hard));
outfile.close();
{
fstream outfile;
outfile.open(nazwa.c_str(), ios::out | ios::binary | ios::app);
outfile << x << endl;
outfile << y << endl;
outfile.close();
}
fclose(FSave);


i

Kod: Zaznacz cały
FILE *FOpen;
string plik;
char x[30],y[30];

OpenDialog1->Filter = "DATA Files (*.dat)|*.dat|";

if( OpenDialog1->Execute() )
   {
      FOpen = fopen(OpenDialog1->FileName.c_str(), "r+");
        }

plik = ( OpenDialog1->FileName.c_str() );

Baza Hardware;

fstream infile;
infile.open(plik.c_str(), ios::in | ios::binary);
infile.read((char *)&Hardware, sizeof(Hardware));


        ComboBox1->ItemIndex = Hardware.cmb;
itd.
        StringGrid2->Cells[0][19] = Hardware.t1;
        {
        infile >> x;
        infile >> y;

        Edit1->Text = x;
   Edit2->Text = y;
        }
  infile.close();

fclose(FOpen);


CzegoÅ› mi brakuje ? :(

EDIT//
Uwaga 2: wylaczenie opcji dynamicznego RTL powoduje brak obslugi funkcji typu virtual, co w przypadku programow zorientowanych obiektowo moze miec powazne nastepstwa w postaci niepoprawnej obslugi dziedziczenia pomiedzy klasami i wspoldzielenia przestrzeni nazw. W wiekszosci przypadkow (99%) funkcje te mozna spokojnie wylaczyc.


:o
Avatar użytkownika
Lamek
Bladawiec
Bladawiec
 
Posty: 7
Dołączył(a): sobota, 19 grudnia 2009, 03:35
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 6
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Cyfrowy Baron » sobota, 19 grudnia 2009, 14:05

Może to szczegół, ale to powinno chyba wyglądać tak:

Kod: Zaznacz cały
#include <vcl.h>
#pragma hdrstop

#include "srednia1.h"
#include <conio.h>
#include <iostream>
#include <string>
#include <stdio.h>
#include <fstream.h>
//---------------------------------------------------------------------------
#pragma argsused
#pragma package(smart_init)
#pragma resource "*.dfm"

using namespace std;

TForm1 *Form1;


nie wiem dlaczego kombinowałeś inaczej. Bardzo prawdopodobne, że dlatego masz właśnie błąd z kompilowaniem z bibliotekami.

A to:

Kod: Zaznacz cały
int h = Application->MessageBoxA("Czy napewno chcesz zrestartowac program ?", "Uwaga",mbNo);


błędem nie jest ale A po nazwie funkcji na ogół oznacza, że będziesz korzystał z typu AnsiString, więc jest zbędne, wystarczy:

Kod: Zaznacz cały
int h = Application->MessageBox("Czy napewno chcesz zrestartowac program ?", "Uwaga", MB_YESNO);

if(h == ID_YES)
{
Application->Terminate();
}

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Lamek
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Lamek » sobota, 19 grudnia 2009, 15:44

1. Tak zrobiłem, ale i tak nie dało rady... Ale skopiowałem borlndmm.dll, CC3260MT.DLL i stlpmt45.dll do folderu z programem i działa na drugim kompie bez BCB :D

2. Dzięki, zapamiętam :)

pozdrawiam i dzięki za szybką odpowiedź
Avatar użytkownika
Lamek
Bladawiec
Bladawiec
 
Posty: 7
Dołączył(a): sobota, 19 grudnia 2009, 03:35
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 6
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Cyfrowy Baron » sobota, 19 grudnia 2009, 17:33

To jednak nie rozwiązuje problemu na przyszłość. Może wrzucisz ten projekt na forum, to zobaczę czemu to nie działa jak powinno.
Jeżeli zdecydujesz się go udostępnić, to usuń z katalogu projektu wszystkie pliki tymczasowe.

Plik do usuwania plików tymczasowych. Wypakować, skopiować plik clean.bat do katalogu z projektem i stamtąd go uruchomić. Zbędne pliki projektu zostaną skasowane. Zaleca się częste kasowanie plików tymczasowych.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Cyfrowy Baron » sobota, 19 grudnia 2009, 21:03

Sprawdziłem Twój projekt. Masz jakiś błąd w ustawieniach projektu lub w ustawieniach środowiska. W C++Builder 2007 nie można wogóle otworzyć projektu, wyskakują jakieś błędy OLE... coś tam. W C++Builder 2010 projekt otwiera się bez problemu i bez problemu kompiluje się razem z bibliotekami.

Popraw jeden błąd. W plikach srednia1.h i srednia1.cpp włączyłeś do projektu w sekcji include bibliotekę fstream.h

w srednia1.cpp: #include <fstream.h> <-- USUŃ
w srednia1.h #include "fstream.h" <-- ZMIEŃ na: #include <fstream.h>

Sprawdź czy teraz skompiluje się z bibliotekami.

Twój plik pomocy nie wyświetla polskich znaków diakrytycznych.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Lamek » sobota, 19 grudnia 2009, 22:46

Dałem nie-finalne pliki, w tym plik pomocy, który jest już po polskiemu :P

A to z tym fstreamem nie pomogło niestety :(
Avatar użytkownika
Lamek
Bladawiec
Bladawiec
 
Posty: 7
Dołączył(a): sobota, 19 grudnia 2009, 03:35
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 6
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Cyfrowy Baron » niedziela, 20 grudnia 2009, 09:31

Porównałem Twój plik projektu Project2.bpr z jednym ze starych plików u mnie i różnice są duże. Czy wprowadzałeś jakieś zmiany w ustawieniach projektu menu: Project -> Options?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Lamek » niedziela, 20 grudnia 2009, 13:42

Przypomina mi siÄ™ tylko ikonka :/

Czy jest może taka opcja, żeby wszystkie komponenty TForm przekopiować na oddzielny projekt ? Wtedy jakby mi poszło, to bym mógł porównać :)
Avatar użytkownika
Lamek
Bladawiec
Bladawiec
 
Posty: 7
Dołączył(a): sobota, 19 grudnia 2009, 03:35
PodziÄ™kowaÅ‚ : 3
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 6
    NieznanyNieznana

Re: Use Dynamic RTL i Linker Error CP32mt.lib

Nowy postprzez Cyfrowy Baron » niedziela, 20 grudnia 2009, 16:22

W konstrukcji aplikacji nie ma jako takiego błędu, jest to błąd ustawień projektu.

Utwórz jakikolwiek nowy projekt aplikacji, nic nie musi robić i spróbuj go skompilować razem z bibliotekami. Jeżeli się uda, to oznacz, że masz coś poprzestawiane w tym swoim starym projekcie, jeżeli się nie uda, to masz problem... Być może źle zainstalowałeś środowisko, lub używasz jakiejś wersji TRIAL.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Biblioteki i komponenty

Kto przeglÄ…da forum

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

cron