Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98

Undefined symbol: jpeg_std_error

07.11.2016, 19:58. Показов 807. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уже второй день бьюсь над проблемой.
Задача : Вызвать код библиотеки dlib из java.
Решение: Написать код функции на с++, с помошью jni сделать .so библиотеку с этим кодом, вызвать мой код из этой библиотеки.
Реализация :
Java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package sample;
 
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
 
public class Main extends Application {
 
 
    public native int[] getPoints(String filepath,String dataFilePath);
 
    static{
        System.loadLibrary("myLib");
        System.loadLibrary("jpeg");
    }
 
    @Override
    public void start(Stage primaryStage) throws Exception{
 
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }
 
 
    public static void main(String[] args) {
 
        Main m = new Main();
        m.getPoints("/home/nikita/Downloads/foto.jpg","/home/nikita/shape_predictor_68_face_landmarks.dat");
        //launch(args);
    }
}
sample_Main.h
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     sample_Main
 * Method:    getPoints
 * Signature: (Ljava/lang/String;Ljava/lang/String;)[I
 */
JNIEXPORT jintArray JNICALL Java_sample_Main_getPoints
  (JNIEnv *, jobject, jstring, jstring);
 
#ifdef __cplusplus
}
#endif
#endif
sample_Main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#define DLIB_JPEG_SUPPORT 
#define NO_MAKEFILE
#include <jni.h>
#include "sample_Main.h"
#include <cstdlib>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing/render_face_detections.h>
#include <dlib/image_processing.h>
#include <dlib/image_io.h>
#include <iostream>
 
JNIEXPORT jintArray JNICALL Java_sample_Main_getPoints
  (JNIEnv * env, jobject obj, jstring str,jstring shapePredicator_68_blablablaFile)
{
    jintArray rezult = NULL;
    const char *ch1 = env->GetStringUTFChars(str,NULL);
    const char *ch2 = env->GetStringUTFChars(shapePredicator_68_blablablaFile,NULL);
    std::string faceFilePath (ch1);    
    std::string shapePred  (ch2);
    std::cout << "photo file name " << faceFilePath << std::endl;
    std::cout << "data name " << shapePred << std::endl;
    
    try{
        std::cout << "24";
        std::vector<dlib::full_object_detection> shapes;
        dlib::frontal_face_detector detector = dlib::get_frontal_face_detector();
        dlib::shape_predictor sp;
        std::cout << "before deseralize shape file";
        dlib::deserialize(shapePred) >> sp;
        std::cout << "after deseralize shape file";
        dlib::array2d<dlib::rgb_pixel> img;
        std::cout << "Before image file load";
        dlib::load_image(img, faceFilePath);
        std::cout << "After image file load";
        pyramid_up(img);
        std::vector<dlib::rectangle> dets = detector(img);
        for (unsigned long j = 0; j < dets.size(); ++j)
        {
            dlib::full_object_detection shape = sp(img, dets[j]);
            //cout << "pixel position of first part:  " << shape.part(0) << endl;
            //cout << "pixel position of second part: " << shape.part(1) << endl;
            // You get the idea, you can get all the face part locations if
            // you want them.  Here we just store them in shapes so we can
            // put them on the screen.
            shapes.push_back(shape);    
        }
        rezult = env->NewIntArray(shapes.size()*68*2);
        jint *body = env->GetIntArrayElements(rezult,NULL);
        unsigned long index = 0;
        for(int i = 0; i < shapes.size(); i++)
        {
            for(int k = 0; k < shapes[i].num_parts();k++)
            {
                body[index] = shapes[i].part(k).x();
                index++;
                body[index] = shapes[i].part(k).y();
                index++;
            }
        }
    }
    catch (std::exception & e)
    {
        std::cout << "\nexception thrown!" << std::endl;
        std::cout << e.what() << std::endl;
    }
    env->ReleaseStringUTFChars(str,ch1);
    env->ReleaseStringUTFChars(shapePredicator_68_blablablaFile,ch2);
    return rezult;
}
Библиотеку создаю из командной строки командой :

g++ -fPIC -o myLib.so -shared -I../../dlib -I/usr/lib/jvm/java-8-oracle/include -I/usr/lib/jvm/java-8-oracle/include/linux -jpeg -lpthread -lX11 -std=c++11

При запуске java выдает такую ошибку:
/usr/lib/jvm/java-8-oracle/bin/java: symbol lookup error: /home/nikita/IdeaProjects/openCV1/lib/native/libmyLib.so: undefined symbol: jpeg_std_error
С чем может быть связана данная ошибка ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2016, 19:58
Ответы с готовыми решениями:

Ошибка при подключении плагина QPSQL "Symbol lookup error undefined symbol pqstatus"
Подскажите пожалуйста. Подключила драйвер PSQL, но при попытке выполнить код QSqlDatabase db =...

Undefined symbol
Здравствуйте! При линковке в Borland C++ 3.0 возникают ошибки: Undefined symbol _SELECT in module ... Undefined symbol _SEND in...

Undefined symbol
Почему компилятор не видит моей процедуры? ideal model small stack 1024 dataseg b dw 12 codeseg start: ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2016, 19:58
Помогаю со студенческими работами здесь

Undefined symbol
Добрый день! Прошу помочь. Написал программу на С++ (Builder) без использования своих классов. Программа работает отлично. Для...

Undefined symbol
Помогите пожалуйста. Нужно добавить форму к проекту, 4 добавились нормально, пятая вроде тоже, но при вызове ее из главной формы (Form5...

undefined symbol
дело дрянь получил задание на си++ сделать калькулятор . до этого изучал си а эту прогу мне нужно сделать за день .очень прошу помочь...

Undefined Symbol
Извините если по С++ Builder вопросы задаются не в это разделе, но я начинающий) Вот код: #include &lt;vcl.h&gt; #pragma hdrstop ...

Undefined symbol
Есть два юнита. На обоих происходит осуществление динамического появления элементов на GridPanel(сам GridPanel на форме 1). Элементы...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Настройка записи справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru