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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рыжий Лис
Просто Лис
275 / 222 / 61
Регистрация: 17.05.2012
Сообщений: 926
Записей в блоге: 4
#1

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

24.05.2013, 21:28. Просмотров 990. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2013, 21:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Компиляция dll библиотеки (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2013, 21:42 #2
а что сейчас не работает? какая ошибка или в чем проблема?
stima
463 / 312 / 26
Регистрация: 22.03.2011
Сообщений: 1,021
Завершенные тесты: 2
24.05.2013, 22:38 #3
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
библиотеке его имя уже меняется на Java_Test_test@8
Это как?) Вы дизассемблировали либу? Если да, то там может быть все что угодно вместо имени Java_Test_test - зависит от разработчиков компилятора.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
24.05.2013, 22:48 #4
Рыжий Лис, Вы знаете я только не давно поднимал эту тему , вот ссылка где рабочий код который дал UI - Классы в dll
stima
463 / 312 / 26
Регистрация: 22.03.2011
Сообщений: 1,021
Завершенные тесты: 2
24.05.2013, 22:59 #5
p.s. вообще @8 это обозначение c транслятором ключевого слова extern

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

Добавлено через 5 минут
p.s.s Я и не заметил. У Вас extern на реализацию
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 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
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
24.05.2013, 23:14 #7
stima, да ? А я подумал , что он хочет сделать dll со своим классом .
stima
463 / 312 / 26
Регистрация: 22.03.2011
Сообщений: 1,021
Завершенные тесты: 2
24.05.2013, 23:25 #8
Цитата Сообщение от Jupiter Посмотреть сообщение
Сообщение от stima
вообще @8 это обозначение c транслятором ключевого слова extern
https://en.wikipedia.org/wiki/Name_m...rosoft_Windows
А я о чем?)
BAADF00D
Заблокирован
24.05.2013, 23:33 #9
Игорь с++, mangling name. Если хочешь сохранить имена полностью перепиши на си и компилируй си компилятором. Я имею ввиду директивы препроцессора и extern "C" в твоем случае.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
24.05.2013, 23:37 #10
BAADF00D, во первых я знаю как сохранить имена функций в dll , а ты вот попробуй метод из класса сохрани . Во вторых читай внимательней прежде чем додельные советы давать !!!!
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2013, 23:38 #11
Цитата Сообщение от stima Посмотреть сообщение
А я о чем?)
extern к @8 отношния не имеет
BAADF00D
Заблокирован
24.05.2013, 23:43 #12
Игорь с++, ты не нервничай на ночь, спать плохо будешь. Удачи тебе в твоем деле.

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

Не по теме:

epic

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2013, 00:28
Привет! Вот еще темы с ответами:

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

cygwin1.dll не хватает библиотеки - C++
всем привет интересно узнать, как можно &quot;подключить&quot; или &quot;вшить&quot; данную библиотеку в программу, чтобы программа не требовала этой...

Подключение Dll библиотеки, вылетает программа - C++
Добрый вечер!Помогите пожалуйста разобраться в чем проблема.. Задача: из библиотеки winmm.dll вызвать фукцию PlaySound()(это работает),...

Использование функций сторонней библиотеки из c++ dll - C++
Какой аналог кода (C#): public static extern int Last(string instrument, double price, int size); для C++ библиотеки (dll)....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.05.2013, 00:28
Ответ Создать тему
Опции темы

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