2013-07-04 5 views
2

Je suis une recrue Linux et j'essaie de déplacer ma bibliothèque de Windows vers Linux. C'est un binaire natif (mylib.so), mais il sera chargé par mono ([DllImport()]). J'utilise un pcre (Perl Compatible Regular Expressions) dans cette bibliothèque. Lorsque mon exécutable .NET essaie de charger mylib.so, il lance une exception (lib non trouvé). Lorsque je définis MONO_LOG_LEVEL=debug. Je dis que ma bibliothèque est trouvée, mais la bibliothèque pcre ne l'est pas. J'ai essayé de le charger dynamiquement (dlopen(), dlsym()). Quand je construis la version exécutable de ma bibliothèque en la liant avec dl (-ldl) cela fonctionne très bien. Mais quand je le charge de mono, j'ai SIGSEGV.Charger une bibliothèque partagée qui utilise une autre bibliothèque partagée

Je crée cette bibliothèque comme (pour la version avec dl):

g++ -fPIC -c *.cpp 
g++ -shared -Wl,-soname,libmylib.so.1.1 -ldl -o libmylib.so.1.1 *.o 

J'ai créer programme de test simple qui se lier à mylib.so and dl (-l: libmylib.so.1.1 -ldl) et il fonctionne.

Je pense que je dois forcer mylib à lier avec dl (ou directement avec pcre), mais je ne sais pas comment. (J'espère que c'est possible)

Tout ce que je veux est de créer une bibliothèque qui utilise pcre et fonctionne sous mono.

+1

La pcre lib est dans les répertoires de recherche du chargeur, ouais? ldconfig -v le montre? – Joe

Répondre

0

Vous avez incorrectement lié votre bibliothèque: si elle utilise libpcre, vous devez également la lier avec l'option -lpcre.

Questions connexes