Linken kann nicht ausgeführt werden (TRegex)
-
Hallo,
ich habe folgendes Problem:Ich versuche meine Anwendung ohne Dynamische RTL und ohne Laufzeit-Packages zu compilieren.
Leider erfolglos, ich erhalte folgende Fehlermeldungen:[ilink32 Fehler] Error: Nicht auflösbares externes 'toupper' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'tolower' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'isupper' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'islower' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'isgraph' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'isprint' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'ispunct' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'iscntrl' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'isspace' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'isalpha' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'isdigit' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'isxdigit' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'isalnum' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'strchr' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'strncmp' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'memmove' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Nicht auflösbares externes 'memcmp' referenziert von C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\12.0\LIB\WIN32\RELEASE\DE\RTL.LIB|System.RegularExpressionsAPI [ilink32 Fehler] Error: Linken kann nicht ausgeführt werden
Ich verwende in meiner Anwendung TRegex über #include "System.RegularExpressions.hpp".
Ohne das include und des entsprechenden Quellcode lässt sich die Anwendung Problemlos erzeugen.
Weiß jemand Rat?Hier ist zusätzlich die liste aller meiner includes:
#include <System.Classes.hpp> #include <Vcl.Controls.hpp> #include <Vcl.StdCtrls.hpp> #include <Vcl.Forms.hpp> #include <Vcl.ExtCtrls.hpp> #include <IdBaseComponent.hpp> #include <IdComponent.hpp> #include <IdContext.hpp> #include <IdCustomTCPServer.hpp> #include <IdTCPClient.hpp> #include <IdTCPConnection.hpp> #include <IdTCPServer.hpp> #include <Vcl.Imaging.jpeg.hpp> #include <Vcl.Imaging.pngimage.hpp> #include "System.RegularExpressions.hpp"
-
Bekanntes Problem:
http://qc.embarcadero.com/wc/qcmain.aspx?d=99647In den Kommentaren steht auch, wie man es umgeht. Das Linken mit msvcrt.dll ist zwar bequem, aber nach Raymond Chen ist das schlechtes Benehmen. Die Lösung mit
#pragma alias
sollte aber problemlos funktionieren.
-
Danke audacia für die schnelle Antwort und den link!
Meine Anwendung lässt sich problemlos erzeugen
Hier habe ich nochmal das Workaround kopiert.Moritz Beutel at 6/24/2012 6:55:21 AM -
Working around is very easy:- first generate an import library for msvcrt.dll:
IMPLIB msvcrt.lib %WINDIR%\system32\msvcrt.dll- copy the generated msvcrt.lib file to $(BDS)\lib\win32\release\psdk
- add this statement to a source file of yours:
#pragma link "msvcrt.lib"
-
Du liest aber auch nicht, was ich schreibe, oder?
Der nicht-schlampige Workaround geht so:
#ifdef _WIN32 && !defined(_WIN64) #pragma alias "toupper" = "_toupper" #pragma alias "tolower" = "_tolower" #pragma alias "isupper" = "_isupper" #pragma alias "isalnum" = "_isalnum" #pragma alias "isalpha" = "_isalpha" #pragma alias "iscntrl" = "_iscntrl" #pragma alias "isdigit" = "_isdigit" #pragma alias "isgraph" = "_isgraph" #pragma alias "isleadbyte" = "_isleadbyte" #pragma alias "islower" = "_islower" #pragma alias "isprint" = "_isprint" #pragma alias "ispunct" = "_ispunct" #pragma alias "isspace" = "_isspace" #pragma alias "isxdigit" = "_isxdigit" #pragma alias "strchr" = "_strchr" #pragma alias "strncmp" = "_strncmp" #pragma alias "memcmp" = "_memcmp" #pragma alias "memmove" = "_memmove" #endif