Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
24.05.2013, 21:28     Компиляция dll библиотеки #1
Как правильно скомпилировать 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2013, 21:42     Компиляция dll библиотеки #2
а что сейчас не работает? какая ошибка или в чем проблема?
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
24.05.2013, 22:38     Компиляция dll библиотеки #3
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
библиотеке его имя уже меняется на Java_Test_test@8
Это как?) Вы дизассемблировали либу? Если да, то там может быть все что угодно вместо имени Java_Test_test - зависит от разработчиков компилятора.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
24.05.2013, 22:48     Компиляция dll библиотеки #4
Рыжий Лис, Вы знаете я только не давно поднимал эту тему , вот ссылка где рабочий код который дал UI - Классы в dll
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
24.05.2013, 22:59     Компиляция dll библиотеки #5
p.s. вообще @8 это обозначение c транслятором ключевого слова extern

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

Добавлено через 5 минут
p.s.s Я и не заметил. У Вас extern на реализацию
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2013, 23:11     Компиляция dll библиотеки #6
Цитата Сообщение от stima Посмотреть сообщение
вообще @8 это обозначение c транслятором ключевого слова extern
https://en.wikipedia.org/wiki/Name_m...rosoft_Windows
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
24.05.2013, 23:14     Компиляция dll библиотеки #7
stima, да ? А я подумал , что он хочет сделать dll со своим классом .
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
24.05.2013, 23:25     Компиляция dll библиотеки #8
Цитата Сообщение от Jupiter Посмотреть сообщение
Сообщение от stima
вообще @8 это обозначение c транслятором ключевого слова extern
https://en.wikipedia.org/wiki/Name_m...rosoft_Windows
А я о чем?)
BAADF00D
Заблокирован
24.05.2013, 23:33     Компиляция dll библиотеки #9
Игорь с++, mangling name. Если хочешь сохранить имена полностью перепиши на си и компилируй си компилятором. Я имею ввиду директивы препроцессора и extern "C" в твоем случае.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
24.05.2013, 23:37     Компиляция dll библиотеки #10
BAADF00D, во первых я знаю как сохранить имена функций в dll , а ты вот попробуй метод из класса сохрани . Во вторых читай внимательней прежде чем додельные советы давать !!!!
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2013, 23:38     Компиляция dll библиотеки #11
Цитата Сообщение от stima Посмотреть сообщение
А я о чем?)
extern к @8 отношния не имеет
BAADF00D
Заблокирован
24.05.2013, 23:43     Компиляция dll библиотеки #12
Игорь с++, ты не нервничай на ночь, спать плохо будешь. Удачи тебе в твоем деле.

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

Не по теме:

epic

Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
25.05.2013, 11:02  [ТС]     Компиляция dll библиотеки #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 минуту
Спасибо всем!
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
25.05.2013, 11:04     Компиляция dll библиотеки #17
А в Java как его вызываете? Как собираете Java-приложение?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2013, 11:52     Компиляция dll библиотеки
Еще ссылки по теме:

C++ Компиляция библиотеки libxml под c++
Компиляция библиотеки через make.exe C++
C++ Как вызывать библиотеки dll, написанные на C#

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

Или воспользуйтесь поиском по форуму:
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
25.05.2013, 11:52  [ТС]     Компиляция dll библиотеки #18
OhMyGodSoLong, http://www.cyberforum.ru/blogs/282025/blog1387.html
Yandex
Объявления
25.05.2013, 11:52     Компиляция dll библиотеки
Ответ Создать тему
Опции темы

Текущее время: 08:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru