Проблема JNI: ошибка поиска символа с помощью FileHandle в C++ DLL

Я создал функции JNI и успешно связал их с динамической библиотекой С++. У меня все они работали нормально, но у меня была проблема с одной функцией, я получил ошибку поиска символа из класса FileHandle, который я использовал в С++, который я использую для чтения данных из файла. Зная, что он работает над обычным проектом С++, но не в DLL.

/usr/lib/jvm/jdk1.7.0/bin/java: ошибка поиска символа: /home/.../NetBeansProjects/TRIOGUI/dist/libNativeAdd.so: неопределенный символ: _ZN5Gdsii9GdsParserC1EPKcN7SoftJin10FileHandle8FileTypeEN5boost8functionIFvS2_ESaIvEEE Результат Java: 127

Кто-нибудь может мне помочь? :)


person MohamedMansour    schedule 03.07.2012    source источник
comment
Вы должны предоставить код, который вы используете... как на стороне Java, так и на стороне C++.   -  person Dennis    schedule 03.07.2012
comment
Это функция в библиотеке, которую я использую в своем проекте. Я сослался на него в компиляторе С++ в свойствах проекта, и библиотека отлично работает со всеми своими функциями в обычном проекте, но когда я делаю свой проект файлом DLL, все функции и собственные функции, которые я сделал, работают правильно, за исключением этого функция.   -  person MohamedMansour    schedule 04.07.2012


Ответы (2)


Я нахожу ваш символ весьма подозрительным. Неправильный косяк. Как ты получил это? Копипаст откуда-то? Пробовали взломать? 10FileHandleF8ileType должно быть 10FileHandle8FileType. Затем он превращается в действительный символ Gdsii::GdsParser::GdsParser(char const*, SoftJin::FileHandle::FileType, boost::function >)

person Pavel Zdenek    schedule 03.07.2012
comment
да, вы были правы насчет 10FileHandle8FileType, и я его отредактировал. и да, это функция класса GDSParser, и я дал ей правильные параметры. В обычном проекте c++ он работает правильно, но когда я использую его в DLL, он выдает мне эту ошибку :( - person MohamedMansour; 04.07.2012
comment
Что значит отредактировал? Так это правильный символ в файле SO или нет? - person Pavel Zdenek; 04.07.2012
comment
Я думаю, вам придется объяснить, что такое нормальный проект, который вы называете полностью рабочим. Если это статически связанное приложение, возможно, вы просто неправильно настроили пути поиска для DLL. - person Pavel Zdenek; 06.07.2012

Я нашел проблему, всем спасибо. В библиотеке, которую я использовал, был файл библиотеки «somefile.a», которого мне не хватало в папке библиотеки. Я получил библиотеку, включил ее в проект и все заработало :)

Еще раз, спасибо, ребята, за попытку помочь :)

person MohamedMansour    schedule 07.07.2012