- Khedron
- Medlem ●
- Österåker
- 2003-09-26 14:14
Hoppas på att det finns någon här som är lite mer insatt än undertecknad på miljön i Darwin. (Nu blir det svengelska!)
Bakgrund:
Helt för mitt höga nöjes skull (sjukt, jag vet) så bestämde jag mig för att uppdatera på OpenSSH och OpenSSL. Jag började med OpenSSL. Laddade ner senaste källkoden, klurade ut vad jag skulle ändra på för flaggor för att få den färdigkompilerade koden att lägga sig enligt Apple-standard och kompilerade. Så långt allt väl (trodde jag).
När det var dags att köra configure så stoppar den med hänvisning till att versionsnumret inte stämmer mellan headerfiler och bilbioteksfiler. Efter lite letande så inser jag att make:n av OpenSSL inte skapar nya dylibs utan snarare bara "touch"-ar dem.
Efter ytterligare lite letande lär jag mig att kompilatorn tydlligen alltid använder sig av eventuella "shared library" oavsett om man har statiska programdelar i sökvägen. Så jag chansar på att helt enkelt ta bort länkarna i /usr/lib från libssl.dylib -> libssl.0.9.dylib och libcrypto.dylib -> libcrypto.0.9.dylib, kompilerar OpenSSL igen får nu istället två statiska bilbiotek: libssl.a och libcrypto.a
Ytterliggare lite trixande senare och efter lite grottande i Makefilen så lyckas jag faktiskt skapa två "share library" som är med rätt version, libssl.0.9.7.dylib och libcrypto.0.9.7.dylib, jag får dock kopiera in dem för hand (men det är väl bara en fråga om att fixa till Makefilen).
Frågor:
Vad är det för skillnad på den olika bilbioteksformaten?
Är det när de laddas in och ur minnet?
När skall man/behöver man de olika filformaten (.dylib / .a)?
Kan jag nu ta bort de statiska filerna och skapa en ny länk som pekar på de nya dylib-filerna?
Kan jag efter sådana nya länkar till 0.9.7-filerna ta bort de gamla 0.9 filerna eller finns det risk att andra program pekar "hårt" direkt mot dessa filnamn (förutsatt bibliotekskoden internt är kompatibel)?
Senast jag höll på att kompilera program hackade jag x86-assembler, ASP och PHP är inte riktigt samma sak, därav min frågor. Jag är inte helt insatt i kodstrukturen Unix-miljön och framförallt inte i Darwin som vad jag förstår skiljer sig åt på vissa avgörande punkter jämnfört med tex ELF.
(Visst, jag skulle kunna Fink:a ner paketen men
1) jag vill lära mig vad som verkligen händer "under ytan" och
2) jag vill verkligen inte flera uppsättningar av samma program samt
3) tänkte så småningom (om möjligt) skapa .pkg-filer så den som vill kan uppdatera tex OpenSSH men ändå ha det "the Apple-way" (med de för- och nackdelar det medför).)
Jag har letat på nätet men har inte hittat något som svarar på mina frågor. Om jag inte har letat tillräckligt noga tar jag gärna emot pekpinnar...:)
PS. > ssh -V
OpenSSH_3.7.1p2, SSH protocols 1.5/2.0, OpenSSL 0.9.7b 10 Apr 2003
Standard i 10.2.6 är:
OpenSSH_3.4p1, SSH protocols 1.5/2.0, OpenSSL 0x0090609f
(Så det verkar ju vara ok men frågan är om det är värt att paketera och ge till folk?)