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=99647

    In 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
    

Anmelden zum Antworten