Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Просто Лис
Эксперт Python
4407 / 2804 / 929
Регистрация: 17.05.2012
Сообщений: 8,190
Записей в блоге: 9
1

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

24.05.2013, 21:28. Показов 2956. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2013, 21:28
Ответы с готовыми решениями:

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

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

Создание/компиляция статической .Lib библиотеки С++
Здравствуйте, Пытаюсь разобраться, как вообще создавать или скомпилировать сторонние статические...

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

17
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.05.2013, 21:42 2
а что сейчас не работает? какая ошибка или в чем проблема?
0
501 / 350 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
24.05.2013, 22:38 3
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
библиотеке его имя уже меняется на Java_Test_test@8
Это как?) Вы дизассемблировали либу? Если да, то там может быть все что угодно вместо имени Java_Test_test - зависит от разработчиков компилятора.
0
480 / 472 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
24.05.2013, 22:48 4
Рыжий Лис, Вы знаете я только не давно поднимал эту тему , вот ссылка где рабочий код который дал UI - Классы в dll
1
501 / 350 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
24.05.2013, 22:59 5
p.s. вообще @8 это обозначение c транслятором ключевого слова extern

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

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

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

Не по теме:

epic

0
Просто Лис
Эксперт Python
4407 / 2804 / 929
Регистрация: 17.05.2012
Сообщений: 8,190
Записей в блоге: 9
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
~ Эврика! ~
1254 / 1003 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
25.05.2013, 11:04 17
А в Java как его вызываете? Как собираете Java-приложение?
0
Просто Лис
Эксперт Python
4407 / 2804 / 929
Регистрация: 17.05.2012
Сообщений: 8,190
Записей в блоге: 9
25.05.2013, 11:52  [ТС] 18
OhMyGodSoLong, https://www.cyberforum.ru/blog... g1387.html
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2013, 11:52

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

Компиляция и использование DLL
Простой, вроде-бы вопрос: как в с++ скомпилировать dll? Как его в последствии использовать? И я...

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

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


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

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

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