Ошибка JCuda: неопределенный символ: Pointer_buffer - PullRequest
3 голосов
/ 07 октября 2011

Я пытаюсь запустить пример JCuda в Debian Linux (32bit).Поскольку на сайте JCuda для Linux x86 нет доступных двоичных файлов, я собрал библиотеки.Сейчас я пытаюсь запустить пример DeviceQuery, но получаю следующие ошибки:

Error while loading native library "JCudaDriver-linux-x86" with base name "JCudaDriver"
Operating system name: Linux
Architecture         : i386
Architecture bit size: 32
Stack trace from the attempt to load the library as a resource:
java.lang.NullPointerException: No resource found with name '/lib/libJCudaDriver-linux-x86.so'
    at jcuda.LibUtils.loadLibraryResource(LibUtils.java:144)
    at jcuda.LibUtils.loadLibrary(LibUtils.java:80)
    at jcuda.driver.JCudaDriver.(JCudaDriver.java:192)
    at jcudatest.JCudaTest.main(JCudaTest.java:29)
Stack trace from the attempt to load the library as a file:
java.lang.UnsatisfiedLinkError: /home/rui/Downloads/JCuda-All-0.4.0-beta1-src/JCudaDriverJNI/lib/libJCudaDriver-linux-x86.so: /home/rui/Downloads/JCuda-All-0.4.0-beta1-src/JCudaDriverJNI/lib/libJCudaDriver-linux-x86.so: undefined symbol: Pointer_buffer
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at jcuda.LibUtils.loadLibrary(LibUtils.java:90)
    at jcuda.driver.JCudaDriver.(JCudaDriver.java:192)
    at jcudatest.JCudaTest.main(JCudaTest.java:29)

Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load the native library
    at jcuda.LibUtils.loadLibrary(LibUtils.java:122)
    at jcuda.driver.JCudaDriver.(JCudaDriver.java:192)
    at jcudatest.JCudaTest.main(JCudaTest.java:29)
Java Result: 1

Я считаю, что ошибка здесь связана с этим неопределенным символом Pointer_buffer, так как я создал символические ссылки на / lib и эту папкунаходится на переменных PATH (я вижу, что это разрешает символьную ссылку на /home/rui/Downloads/JCuda-All-0.4.0-beta1-src/JCudaDriverJNI/lib/libJCudaDriver-linux-x86.so, как и предполагалось).Все работает и с Cuda, так как я могу компилировать и запускать примеры Cuda.Версия Cuda 4.0.17 и JCuda 0.4.0-beta1 (с веб-сайта JCuda я вижу Версия 0.4.0-бета1. Эти библиотеки были скомпилированы для CUDA 4.0 (сборка 17) , так что я думаю, что я нездесь также нет никакой несовместимости).Я настраиваю свой проект на Netbeans, и я включил исходные файлы, присутствующие в папке JcudaJava.Нужно ли включать файлы cpp и hpp из папок JCudaDriverJNI и JCudaRuntimeJNI (я никогда раньше не работал с JNI, не знаю, что мне нужно включить).

Заранее спасибо,Руи

1 Ответ

0 голосов
/ 01 февраля 2012

«неопределенный символ» означает, что определение символа (переменная, функция) не найдено. JCuda определяет Pointer_buffer в CommonJNI / PointerUtils.cpp, поэтому должна быть некоторая проблема, включая PointerUtils.o в .so. Были ли ошибки при компиляции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...