2012-01-07 2 views
1

Я пытаюсь следовать примеру SWIG Java, расположенному here. В этом примере используется cygwin для компиляции. Я хотел бы передать компилятору alredy скомпилированную dll, test.dll, а не исходный C-файл. В примере SWIG.org используется источник C. Я попытался передать test.dll (скомпилированный источник C), а затем example.dll третьей команде, но я получаю сообщение об ошибке «test.dll: нет такого файла или каталога». Третья команда примера SWIG.org создает файл example.dll на основе example.c. Как я могу создать example.dll, чтобы он использовал test.dll вместо example.c?SWIG CYGWIN DLL linking

Есть ли способ сделать это в контексте этого примера?

Моей попытка без C Источника, просто дллы:

$ -java example.i SWIG

$ НКА example_wrap -I/с/jdk1.6.0_30/включает -I /c/jdk1.6.0_30/include/win32

$ НКУ -shared example_wrap.o -mno-Cygwin -Wl, - адд-STDCALL псевдоним -o test.dll example.dll

SWIG.org Пример кода:

$ swig -java example.i 
$ gcc **-c example.c** example_wrap.c -I/c/jdk1.3.1/include -I/c/jdk1.3.1/include/win32 
$ gcc -shared example.o example_wrap.o -mno-cygwin -Wl,--add-stdcall-alias -o example.dll 
+1

Вы действительно хотите использовать Java 1.3.1, учитывая его почти 12 лет? –

+0

Я использую 1.6, это было из примера ... исправлена ​​опечатка. – c12

ответ

1

Вам необходимо пройти test.dll до последней команды, которая связывает вашу программу, а не второй, который только компилирует исходный файл example_wrap.c. (Опция -c сообщает gcc только для компиляции.)

Обратите внимание, что упорядочение объектов и DLL на линии ссылок важно. DLL должны появляться после всего, что их использует.

+1

Я пробовал $ gcc -shared example_wrap.o -mno-cygwin -Wl, - add-stdcall-alias -o test.dll example.dll, где test.dll является уже обработанной dll моих библиотек C, а example.dll - новая dll, которая общается с ней. Я получил gcc: test.dll: Нет такого файла или каталога. Он должен создать test.dll, не хотите, чтобы он был как вход, любые идеи? – c12

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