Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9

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

24.05.2013, 21:28. Показов 4148. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2013, 21:28
Ответы с готовыми решениями:

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

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

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

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

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

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

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

Не по теме:

epic

0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.05.2013, 11:02  [ТС]
Цитата Сообщение от 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
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
25.05.2013, 11:04
А в Java как его вызываете? Как собираете Java-приложение?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.05.2013, 11:52  [ТС]
OhMyGodSoLong, https://www.cyberforum.ru/blog... g1387.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2013, 11:52
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru