Можно ли сделать classpath @rpath в библиотеке JNI?

У меня есть библиотека, от которой зависит мой JNI, я хотел бы, чтобы она загружалась относительно пути к классам, возможно ли это?

1

Решение

По отношению к classpathнет, это не возможно — библиотеки, в том числе .jnilib следуйте пути поиска ОС, определенному на основе того, что назначает JRE, и того, что упоминают сами библиотеки.

Когда вы делаете .jnilibВы можете добавить флаг компоновщика, чтобы указать rpath относительно пути к «загрузчику» для библиотеки, что позволит вам размещать зависимые библиотеки в расположении рядом с .jnilib сам, который может выполнить подобное поведение:

libjni.jnilib: libjni.o
$(CC) -o $@ $< -Wl,-rpath,@loader_path/../lib

Важным пунктом является добавление -Wl,-rpath,@loader_path/../lib — который говорит скажите компоновщику, чтобы добавить @loader_path/../lib к rpath из .jnilib,

Значение @loader_path решает к месту расположения .jnilib файл во время выполнения.

Если вы хотите загрузить зависимости, основанные на пути к классам, вам на самом деле придется найти библиотеки, основанные на пути к классам, и явно загрузить их в JRE, используя System.load()и затем они должны быть предварительно разрешены командой dyld при загрузке библиотеки, от которой зависит модуль.

3

Другие решения


По вопросам рекламы [email protected]