2010-04-08 4 views
-1

J'ai un lexer créé avec flex (cygwin). Normalement, je le compile dans un fichier .exe.Compilation de fichiers flex dans dll

Pour le nouveau projet je besoin d'un lexer à utiliser dans un plus grand programme C# fonctionnant sous Windows XP. Bien sûr, je peux exécuter un fichier en utilisant System.Diagnostics.Process. Mais ce n'est pas la meilleure solution pour moi car je veux que ce programme s'exécute sur plusieurs machines.

Comment puis-je créer une dll sous Cygwin ayant le code source du lexer?

Merci à l'avance ... Szpilona

Répondre

1

Flex produit un fichier source C ou C de avec une fonction yylex(). Exécutez flex sur votre grammaire (fichier .l) pour produire un fichier .c ou .cpp, puis compilez ce fichier avec gcc -c pour produire un fichier objet, ou compilez-le avec gcc -shared pour produire un fichier .so bibliothèque.

flex toy.l 
gcc -shared toy.lexer.c 

Flex ou Flex ++ produira un lexer qui peut être compilé avec ou sans cywgin. Vous pouvez également utiliser MinGW ou Visual C++.

+0

Eh bien, j'ai déjà essayé cela. Précisément je courais flex sur ma grammaire, puis compilé le fichier c obtenu avec: gcc -c lekser.c gcc -o -shared lekser.dll lekser.o fichier dll a été créé, mais il ne fonctionne pas. J'ai essayé d'accéder à la bibliothèque en utilisant le code: [DllImport ("lekser.dll")] yylex int extern public static(); mais l'exception DllNotFoundException s'est produite. Le fichier, à coup sûr, est placé dans le bon répertoire et le code C# est correct (au moins cela fonctionne avec une autre DLL que j'ai créée pour le tester). C'est pourquoi je pensais qu'il y avait une option nécessaire lors de l'exécution de flex sur le fichier de grammaire. – Szpilona

+0

La DLL est-elle dans votre PATH? Cette exception est un type d'exception "fichier trouvé trouvé". – codenheim

Questions connexes