Results 1 to 6 of 6

Thread: Linken van C obj files sterk vereenvoudigd

  1. #1
    Senior Member Thaddy's Avatar
    Join Date
    Dec 2004
    Location
    Amsterdam
    Posts
    2,211

    Linken van C obj files sterk vereenvoudigd

    Sinds Delphi 6 wordt crtl.dcu meegeleverd met Delphi.
    Geen sources erbij, wat is het ?
    Antwoord een complete C runtime library die gebruik maakt van Delphi's memory manage en rtl etc..
    Vanaf Delphi 2005 kun je als je C obj's van bijvoorbeeld CBuilder wilt mee linken gewoon crtl in je uses clause zetten.
    Vanaf Delphi 6 kan dat ook, maar alleen met een trucje:
    In D6 en D7 is er een crtl.dcu afhankelijkheid van "midaslib.dcu", nou ja, kennelijk een bugje dat nooit is hersteld en waardoor er een internal error L3169 ontstaat in D7. Het is voldoende om een lege midaslib.pas aan te maken om toch de crtl mee te linken:
    Code:
    //deze code is niet nodig vanaf D2005 t/m XE2, alleen D6 en D7!
    unit midaslib;
    interface
    implementation
    end.
    Je kunt nu bijvoorbeeld heel eenvoudig sqlite3.obj gecompileerd met een OMF compiler (zoals CBuilder) statisch linken en er mee werken.

    Jammer dat dit altijd zo slecht gedocumenteerd is geweest!
    Er gaat een wereld aan C libraries voor je open zonder moeilijke linker stubs etc.

    Het is ook een lesje van wat er kan gebeuren als je je uses clause niet opruimt!!! en zomaar DCU's uitlevert zonder te testen(in D6 en D7)
    Werken aan Ansi support voor Windows is verspilde tijd, behalve voor historici.

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Interessante tip, die ga ik onthouden!
    Niet dat ik hem direct nodig heb, maar ik weet nu waar ik de info terug kan vinden als ik
    wél tegen zo'n probleem oploop.

    Bedankt!

    Peter.
    TMemoryLeak.Create(Nil);

  3. #3
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Waarschijnlijk omdat het simpelweg niet gesupport is. Lijkt gewoon een hulpfile voor midas (die in C++ geschreven is).

  4. #4
    Klinkt als een goeie tip (of misschien een goeie, vieze hack ).
    Maar hoe gaat dat linken dan in z'n werk? En kon dat niet sowieso al? Ik spreek hier als leek op dat gebied; ik heb nog nooit een .obj meegecompileerd.

    Eerst maar even Googlen dus...

    Ok, ik heb nu geleerd (van Rudi) dat het linken van .obj files lastig is (iets met runtime functies die missen?).
    Is deze crtl.dcu dan een uit-de-doos-oplossing voor het probleem dat Rudi beschrijft?
    1+1=b

  5. #5
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Als je een file (zeg maar unit) gebruikt in C of C++, trekt het niet automatisch alle dependencies mee zoals in Pascal of Java.

    Pascal heeft dit ook, indien je Pascal code in C wil gebruiken moet je tenminste een (soms aangepaste) unit system meelinken.

    C gebruikers zijn er wat meer aan gewend, omdat ze dat bij gewone programma ontwikkeling ook zelf moeten administreren

  6. #6
    Senior Member Thaddy's Avatar
    Join Date
    Dec 2004
    Location
    Amsterdam
    Posts
    2,211
    Eens, maar je kunt in BC gecompileerde libs gewoon mee linken omdat de basis er is.
    Dit soort grappen vereist natuurlijk altijd wat taalgevoel... <zucht>
    Anders heeft de gebruiker waarschijnlijk ook moeite om de C header te vertalen.. <smile>

    Sicko!, het gras is groener dan het leek. <smile>
    Werken aan Ansi support voor Windows is verspilde tijd, behalve voor historici.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •