.dll vs .so

Dimitris Kamenopoulos dkamen at otenet.gr
Sun Jul 27 18:46:59 EEST 2003


On Saturday 26 July 2003 17:42, Alexandros Papadopoulos wrote:> Δεν είμαι προγραμματιστής, γιαυτό παρακαλώ να δείξετε καταννόηση:>> Έχουμε μια ομάδα που κάνει C/C++ development πάνω σε Windows. Για την> ακρίβεια, χρησιμοποιούν κώδικα ενός προμηθευτή για να τρέχουν simulations> με το Matlab, ώστε να καταλάβουν πόσο καλά τρέχει ο κώδικάς τους.>> Το πρόβλημα είναι ότι ο προμηθευτής δίνει μόνο DLLs, χωρίς source, για αυτά> τα simulations.>> Τώρα η ομάδα θέλει να κάνει τη δουλειά της σε Linux...>> [0] Τα DLLs είναι τελείως άχρηστα, και ελπίδα "μετατροπής" σε κάτι του στυλ> .so δεν υπάρχει, σωστά;
Ναι.
> [1] Αν έχει κανείς source code, πόσο δύσκολο είναι να παράγει μια> βιβλιοθήκη που να συμπεριφέρεται με ακριβώς τον ίδιο τρόπο, και σε UNIX και> σε Windows; Είναι τόσο διαφορετικά τα system calls και η αρχιτεκτονική, που> ο κώδικας θα πρέπει να αλλαχθεί για κάθε λειτουργικό; (μιλάμε για πολύ low> level καταστάσεις, σε επίπεδο device driver)
Είναι αρκετά δύσκολη, αλλιώς όλες οι εταιρίες θα έδιναν και drivers για Unix αμέσως. Το ότι το σκέφτονται και συνήθως επιλέγουν να στηρίξουν μόνο τα Windows σημαίνει ότι η κατασκευή του driver για Unix είναι ολόκληρη υπόθεση με όχι μικρό κόστος σε χρόνο και χρήμα. 
Παράδειγμα 1: τα στοιχειώδη system calls (open, close, sleep κλπ) είναι εντελώς διαφορετικά στη συμπεριφορά και το API ανάμεσα στα δύο συστήματα. 
Παράδειγμα 2: στα Windows ένας device driver είναι ένα δυναμικό κομμάτι κώδικα (dll) που τρέχει στη userland, ενώ στο Linux ένας device driver είναι ένα κομμάτι του πυρήνα (αδιάφορο αν είναι ενσωματωμένο από την αρχή ή ενσωματώνεται δυναμικά ως module). Όπως καταλαβαίνεις υλοποιούνται και λειτουργούν με εντελώς διαφορετικό τρόπο. 
Παράδειγμα 3: δεν υπάρχει ένα Unix, τα πράγματα είναι συνήθως πολύ διαφορετικά ανάμεσα σε ένα Solaris και σε ένα Linux, ή ανάμεσα σε ένα Linux 2.2 και σε ένα Linux 2.4 ή ανάμεσα σε ένα Linux με gcc 2.95 και σε ένα Linux με gcc 3.2.
Παράδειγμα 4: ο τρόπος που χτίζεται ένα πρόγραμμα σε Windows (τυπικά ως VC project) είναι διαφορετικός από τον τρόπο που χρησιμοποιείται στο Linux (autotools, make κλπ). Ακόμα και αν πάρετε τον κώδικα θα πρέπει να φτιάξετε το build system από μόνοι σας και από την αρχή, να ορίσετε targets και τρέχα γύρευε.
> Δηλαδή, εμείς γράφουμε τον δικό μας κώδικα έτσι κι αλλιώς, και μπορούμε να> τον κάνουμε compile σε Linux. Αν έχουμε και τον πηγιαίο κώδικα του> προμηθευτή, πόσο δύσκολη μπορεί να είναι η μεταγλώττιση και των δύο> κομματιών, ώστε να λειτουργούν όπως πριν (που ήταν compiled σε Windows;)
...από την άλλη αν ι ο device driver τρέχει εξ ολοκλήρου στη userland (π.χ. μπορεί να υλοποιεί το πρωτόκολλο επικοινωνίας με ένα modem χρησιμοποιώντας τον serial driver μόνο για την ανταλλαγή των δεδομένων, ή το gphoto που χρησιμοποιεί τον USB driver για να οδηγεί ψηφιακές μηχανές) τότε γίνεται. Γενικά, βλέποντας και κάνοντας :-) 




More information about the Linux-greek-users mailing list