#c #linux
#c #linux
Вопрос:
Я пытаюсь использовать программу C для чтения данных из спектрометра, у которого есть коммерческий драйвер спектрометра с именем Omnidriver. Драйвер разработан на Java. Установщик этого драйвера установит версию 1.6.0_01 (1.6 update 1) Java JVM. Для разработки на C я сам устанавливаю JDK 14.
Код прост:
define LINUX
#include <iostream>
#include <WrapperLinux64.h>
#include <Wrapper.h>
#include <ArrayTypes.h>
int main(){
Wrapper wrapper;
***code to read***
return(0);
}
Затем я компилирую код следующим образом
/usr/bin/g -std=c 14 -O2 -Wall -I ~/Programs/OmniDriver/include -I /usr/lib/jvm/jdk-14.0.2 -L /usr/lib/jvm/jdk-14.0.2/lib -I ~/Programs/ROOT/include -I /usr/lib/jvm/jdk-14.0.2/include -I /usr/lib/jvm/jdk-14.0.2/include/linux main.cxx -o main ~/OmniDriver/OOI_HOME/libOmniDriver.so ~/Programs/OmniDriver/OOI_HOME/libcommon.so -ljvm
Это можно упростить как:
g -std=c 14 -O2 (-ggdb3) -Wall -I /path main.cxx -o main -L lib.so -ljvm
Код может быть скомпилирован, но когда я его запускаю, он работает чрезвычайно медленно. Это должно быть сделано за 3 секунды, но это занимает 10 минут.
Первая часть выходных данных выглядит следующим образом:
Linux native USB library loaded.
NatUSB
Detected device change on USB
Затем требуется 2 минуты, чтобы получить:
The interface was claimed successfully.
и затем еще несколько минут для считывания данных со спектрометра.
Я новичок, и мне не удается решить эту проблему, даже если я стараюсь изо всех сил. Не могли бы вы, пожалуйста, дать мне несколько советов?
Комментарии:
1. Поскольку все время тратится на код поставщика, сначала обратитесь в их службу поддержки. Вы могли бы попробовать запустить свою программу под strace, чтобы посмотреть, что она делает в эти мертвые моменты, но поскольку вы платите за поддержку, лучше используйте ее. Вы получаете такое же замедление, если используете JDK в комплекте?
2. @Botje Я думал, что уже использую JDK в комплекте! Компилятор запрашивает файл заголовка jni.h, поэтому я включаю путь к JDK 14. Я не уверен, что я делаю на самом деле!
3. В тексте вашего вопроса указано, что «Установщик этого драйвера установит версию 1.6.0_01 (1.6 update 1) Java JVM». Так имеет ли значение, если вы создаете / ссылаетесь на это вместо OpenJDK 14? Вероятно, это первое, о чем вас попросит поставщик.
4. @Botje Я проверил еще раз и обнаружил, что входящая в комплект JVM — это только JVM, без JDK. Внутри нет файла заголовка.
5. @Botje Спасибо! Я уже нахожу что-то неправильное в strace! Кажется, что что-то не так с разрешением usb. Я попробую больше, а затем обновлю вопрос.