2010-04-08 2 views
-1

У меня есть lexer, созданный с помощью flex (cygwin). Обычно я компилирую его в файл .exe.Компиляция файла flex в dll

Для новейшего проекта мне нужен лексер для использования в более крупной программе на C#, запущенной в Windows XP. Конечно, я могу выполнить файл с помощью System.Diagnostics.Process. Но это не лучшее решение для меня, поскольку я хочу, чтобы эта программа запускалась на нескольких машинах.

Как создать dll под cygwin с исходным кодом lexer?

Заранее спасибо ... Szpilona

ответ

1

Flex производит C или C++ исходный файл с функцией yylex().

Запустите flex на вашей грамматике (.l файл), чтобы создать файл .c или .cpp, затем скомпилируйте этот файл с помощью gcc -c для создания объектного файла или скомпилируйте его с помощью gcc -shared для создания .so библиотека.

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

Flex или Flex ++ создадут лексер, который может быть скомпилирован с помощью или без цигун. Вы также можете использовать MinGW или Visual C++.

+0

Ну, я уже пробовал это. Именно я побежал прогибается на моей грамматике, а затем скомпилировал полученный файл Си с: GCC -c lekser.c НКУ -shared -o lekser.dll lekser.o DLL файл был создан, но он не работает. Я попытался получить доступ к библиотеке с помощью кода: [DllImport ("lekser.dll")] public static extern int yylex(); , но произошло событие DllNotFoundException. Файл, безусловно, помещен в правильный каталог, а код C# верен (по крайней мере, он работает с другой dll, которую я создал для проверки этого). Вот почему я подумал, что при запуске flex в файле грамматики есть опция. – Szpilona

+0

Является ли dll в вашей PATH? Это исключение представляет собой исключение типа «найденный файл». – codenheim

Смежные вопросы