2017-02-02 34 views
0

Я звоню dlopen ("libjvm.so", RTLD_NOLOAD) на RHEL 64 в рамках 64-битного Java-процесса. и он терпит неудачу с ошибкой:dlopen failing on Rhel 7.2, 64 бит для libjvm.so

libjvm.so: invalid mode for dlopen(): Invalid argument 

Я сделал lsof -p <pid of java process> и это показывает libjvm.so как загруженный модуль. libjvm.so загружается с пути jre1.8.0_121/lib/amd64/server/libjvm.so. Не удалось найти больше об этой ошибке. То же самое отлично работает при использовании 32-разрядной версии java. где libjvm.so загружается из каталога lib/i386/client. Оцените любые указатели о том, где искать причину или что эта ошибка действительно означает. Благодарю.

ответ

1

invalid mode for dlopen()

Это правильно ошибка: вы назвали dlopen с неверным режимом.

От dlopen man page

One of the following two values must be included in flags: 
    RTLD_LAZY ... 
    RTLD_NOW ...    
+0

Спасибо за ваш ответ. Позвольте мне сделать снимок .. но то же самое прекрасно работает при использовании 32-битного Java-процесса ... Я не хочу загружать эту библиотеку. Я просто хочу получить дескриптор того, который уже загружен. – Prakash

+0

Спасибо за ответ .. RTLD_LAZY | RTLD_NOLOAD работает. Я не знаю, зачем это нужно для 64x .. на 32 он работает только с RTLD_NOLOAD .. – Prakash

+0

Я только что проверил источники GLIBC и проверил «один из« RTLD_ {NOW, LAZY} должен быть установлен »был добавлен в 1998 году. У меня нет объяснений, почему это работает для вас в 32-битном режиме; это не должно. Тривиальный тест в моей системе, пытающийся «dlopen» («libc.so.6», RTLD_NOLOAD), терпит неудачу как в 32, так и в 64-битных режимах. –