Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Рыжий Лис
Просто Лис
1188 / 511 / 344
Регистрация: 17.05.2012
Сообщений: 2,066
Записей в блоге: 8
1

Компиляция dll библиотеки

24.05.2013, 21:28. Просмотров 1215. Ответов 17
Метки нет (Все метки)

Как правильно скомпилировать dll библиотеку, чтобы имена методов не изменялись? Например, у меня есть метод с именем Java_Test_test, а после компиляции в библиотеке его имя уже меняется на Java_Test_test@8
компилирую командой
Bash
1
g++ -x c++ -shared -I "C:\Program Files\Java\jdk1.7.0_02\include" -I "C:\Program Files\Java\jdk1.7.0_02\include\win32" -o Test.dll Test.cpp
Заголовочный файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Test */
 
#ifndef _Included_Test
#define _Included_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Test
 * Method:    test
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Test_test
  (JNIEnv *, jclass);
 
#ifdef __cplusplus
}
#endif
#endif
файл cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include "Test.h"
 
#ifdef __cplusplus
extern "C" {
#endif
 
JNIEXPORT void JNICALL Java_Test_test (JNIEnv *a, jclass b){
    printf("Hello\n");
}
 
#ifdef __cplusplus
}
#endif
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2013, 21:28
Ответы с готовыми решениями:

Компиляция библиотеки libxml под c++
Под libxml есть библиотека xmlwrapp позволяющая работать с libxml под с++....

Компиляция библиотеки через make.exe
Скачал исходный код библиотеки oglft-0.9, скачал make-3.81.exe, не могу понять...

Компиляция, линковка, статические и динамические библиотеки
Доброго вам времени суток. Обращаюсь к вам со списком близких по теме вопросов....

Компиляция функции в dll на С++
Всем привет. Есть функция для фильтрации сигнала. Пытаюсь разобраться как...

Компиляция dll на win8x64 и ошибка на winXP
Компилирую длл библиотеку на Windows 8 (x64), потом пытаюсь воспользоваться на...

17
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2013, 21:42 2
а что сейчас не работает? какая ошибка или в чем проблема?
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
24.05.2013, 22:38 3
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
библиотеке его имя уже меняется на Java_Test_test@8
Это как?) Вы дизассемблировали либу? Если да, то там может быть все что угодно вместо имени Java_Test_test - зависит от разработчиков компилятора.
0
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
24.05.2013, 22:48 4
Рыжий Лис, Вы знаете я только не давно поднимал эту тему , вот ссылка где рабочий код который дал UI - Классы в dll
1
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
24.05.2013, 22:59 5
p.s. вообще @8 это обозначение c транслятором ключевого слова extern

Добавлено через 4 минуты
2Игорь с++ Не говорите того что не знаете)), тут человек пытается из джава кода дернуть с++ функцию из либы.
Только не понятно в чем проблема)

Добавлено через 5 минут
p.s.s Я и не заметил. У Вас extern на реализацию
0
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2013, 23:11 6
Цитата Сообщение от stima Посмотреть сообщение
вообще @8 это обозначение c транслятором ключевого слова extern
https://en.wikipedia.org/wiki/Name_m...rosoft_Windows
0
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
24.05.2013, 23:14 7
stima, да ? А я подумал , что он хочет сделать dll со своим классом .
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
24.05.2013, 23:25 8
Цитата Сообщение от Jupiter Посмотреть сообщение
Сообщение от stima
вообще @8 это обозначение c транслятором ключевого слова extern
https://en.wikipedia.org/wiki/Name_m...rosoft_Windows
А я о чем?)
0
BAADF00D
Заблокирован
24.05.2013, 23:33 9
Игорь с++, mangling name. Если хочешь сохранить имена полностью перепиши на си и компилируй си компилятором. Я имею ввиду директивы препроцессора и extern "C" в твоем случае.
0
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
24.05.2013, 23:37 10
BAADF00D, во первых я знаю как сохранить имена функций в dll , а ты вот попробуй метод из класса сохрани . Во вторых читай внимательней прежде чем додельные советы давать !!!!
0
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2013, 23:38 11
Цитата Сообщение от stima Посмотреть сообщение
А я о чем?)
extern к @8 отношния не имеет
0
BAADF00D
Заблокирован
24.05.2013, 23:43 12
Игорь с++, ты не нервничай на ночь, спать плохо будешь. Удачи тебе в твоем деле.

Добавлено через 2 минуты
метод класса... можно вынести и в отдельный Си модуль. Собрать объектные файлы и вместе их слинковать. Не знаю конечно может и это невозможно (в данном случае), однако как вариант решения думаю стоит рассмотреть.
0
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
24.05.2013, 23:59 13
BAADF00D, спасибо за совет , но я уже нашёл выход из сложившейся ситуации.
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
25.05.2013, 00:24 14
Цитата Сообщение от upiter Посмотреть сообщение
extern к @8 отношния не имеет
Как это?) Возможно я пропустил c ... extern c ...
0
BAADF00D
25.05.2013, 00:28
  #15

Не по теме:

epic

0
Рыжий Лис
Просто Лис
1188 / 511 / 344
Регистрация: 17.05.2012
Сообщений: 2,066
Записей в блоге: 8
25.05.2013, 11:02  [ТС] 16
Цитата Сообщение от Jupiter Посмотреть сообщение
а что сейчас не работает? какая ошибка или в чем проблема?
Я вызываю метод из java с именем Java_Test_test, а его в либе не существует

Добавлено через 6 минут
Теперь работает! Компилирую так:
Bash
1
g++ -x c++ -Wl,--kill-at -save-temps -shared -I "C:\Program Files\Java\jdk1.7.0_02\include" -I "C:\Program Files\Java\jdk1.7.0_02\include\win32" -o Test.dll Test.cpp
Добавлено через 1 минуту
Спасибо всем!
0
OhMyGodSoLong
~ Эврика! ~
1246 / 995 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
25.05.2013, 11:04 17
А в Java как его вызываете? Как собираете Java-приложение?
0
Рыжий Лис
Просто Лис
1188 / 511 / 344
Регистрация: 17.05.2012
Сообщений: 2,066
Записей в блоге: 8
25.05.2013, 11:52  [ТС] 18
OhMyGodSoLong, http://www.cyberforum.ru/blogs/282025/blog1387.html
0
25.05.2013, 11:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2013, 11:52

Компиляция Sqlite3.dll в Visual C++ 6. Нужны умные головы профессионалов
Доброе время суток уважаемые программисты! В языке C++ я даже не новичок, а...

Подключение dll библиотеки
Привет. Для работы с шаговым двигателем мне необходимо воспользоваться...

Создание dll библиотеки c++
Есть проект, где много заголовочных файлов. Как собрать dll библиотеку так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru