Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Χρειάζομαι την βιβλιοθήκη jpeg σε 64 bit έκδοση.

Κατέβασα τον κώδικα από εδώ :

http://www.ijg.org/

 

και το έκανα compile με το Visual Studio ως εξής :

 

μετονόμασα το makefile.vc σε makefile

μετονόμασα το jinclude.vc σε jinclude.h

 

άνοιξα το visual studio command prompt και έδωσα

nmake clean all

 

Το θέμα είναι πως αυτό βγάζει 32bit έκδοση. Τι κάνω για να του αλλάξω το target machine;

Δημοσ.

Το έκανα αυτό στην αρχή, αλλά μου έλεγε πως τα .obj που πάει να κάνει link έχουν άλλο architecture.

Τελικά έπρεπε να φορτώσω το Visual Studio command prompt με x64 flag :

 

%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" amd64

 

Έπαιξε, έκανε και compile και το άλλο project που είχε dependency στο libjpeg. Μένει τώρα να δω αν τρέχει ...

Δημοσ.

Λίγο off topic, αλλά αντιμετωπίζω το εξής :

Το νέο dll που βγήκε (x64) έχει λίγο περίεργα ονόματα στις συναρτήσεις που κάνει export :

 

>?openslide_open@@YAPEAU_openslide@@PEBD@Z

 

αντί για

 

>openslide_open

 

που είχε το original x86, με αποτέλεσμα να λαμβάνω entry point not found.

Στον κώδικα η παραπάνω συνάρτηση π.χ. είναι δηλωμένη ως :

 

>__declspec(dllexport) openslide_t *openslide_open(const char *filename);

 

Τι άλλο θέλει;

 

Btw, Release build κάνω, χωρίς debug info - γιατί κάπου διάβασα πως αν κάνεις debug build, τότε βγάζεις αυτά τα περίεργα name decorations. Αλλά και στο release τα ίδια κάνει!

 

Τελικά ήθελε :

 

extern "C" __declspec(dllexport)

 

τώρα όμως δεν δουλεύει τίποτα ... ποιος ξέρεις τι γίνεται εκεί μέσα!

 

Death by a million dependencies ... αυτή τη φορά τη γλίτωσα!

Δημοσ.

Κανε κατι τετοιο

>#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C extern
#endif

#ifdef _DLLEXPORTS
#define MYAPI EXTERN_C __declspec(dllexport)
#else
#define MYAPI EXTERN_C __declspec(dllimport)
#endif

 

 

Οταν κανεις build το αυτο βαλε το define _δδλεχπορτσ

 

εδιτ βαλε το μυαπι μπροστα απο ολες της συναρτησεις grin.png

Δημοσ.

Βασικά υπήρχε αυτό :

 

#define OPENSLIDE_PUBLIC() __declspec(dllexport)

 

το οποίο έκανα

 

#define OPENSLIDE_PUBLIC() extern "C" __declspec(dllexport)

 

και το OPENSLIDE_PUBLIC() ήταν ήδη μπροστά από κάθε συνάρτηση (compile προσπαθούσα να κάνω ένα open source project).

Δημοσ.

...

(compile προσπαθούσα να κάνω ένα open source project).

Μια καλή ιδέα για τέτοιες περιπτώσεις είναι να στήσεις κι ένα mingw στο μηχανάκι σου. Είτε σκέτο (προσωπικά το προτιμώ) είτε μέσω κάποιου IDE (π.χ. code::blocks) είτε πακεταρισμένο (π.χ. tdm-gcc: http://tdm-gcc.tdragon.net/, δίνω link γιατί παίζει πολύ τελευταία, αν και προσωπικά δεν το έχω δοκιμάσει ακόμα).

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...