RFR: JDK-8319516 - Native library suffix impact on the library loading in AIX- Java Class Loader [v2]

Martin Doerr mdoerr at openjdk.org
Tue Mar 19 16:12:22 UTC 2024


On Tue, 19 Mar 2024 10:01:31 GMT, Suchismith Roy <sroy at openjdk.org> wrote:

>>> > In AIX, we have an usecase where shared libraries have certain member objects to be referred to. E.g libclang.a(shr_64.o) .
>>> 
>>> Would you happen to know any official documentation which explains that AIX syntax?
>>> 
>> 
>> https://www.ibm.com/docs/en/aix/7.2?topic=l-ld-command
>> Text : 
>> 
>> **autoload: path/file(member) | Automatically load the archive member.
>> -- | --**
>> Autoload is a  flag used to load archive members. The format of the path is mentioned.
>
>> Do you mean some application code is calling the `System.loadLibrary()` method with such values?
> 
> Yes we are trying to install liblcang and also jextract and it fails with errors.
> 
> Exception in thread "main" java.lang.UnsatisfiedLinkError: no clang in java.library.path
>  
>         at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2439)
>         at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:916)
>         at java.base/java.lang.System.loadLibrary(System.java:2063)
>         at [org.openjdk.jextract at 22/org.openjdk.jextract.clang.libclang.RuntimeHelper.<clinit>(RuntimeHelper.java:65)](mailto:org.openjdk.jextract at 22/org.openjdk.jextract.clang.libclang.RuntimeHelper.%3cclinit%3e(RuntimeHelper.java:65))
>         at [org.openjdk.jextract at 22/org.openjdk.jextract.clang.libclang.constants$17.<clinit>(constants$17.java:46)](mailto:org.openjdk.jextract at 22/org.openjdk.jextract.clang.libclang.constants$17.%3cclinit%3e(constants$17.java:46))
>         at [org.openjdk.jextract at 22/org.openjdk.jextract.clang.libclang.Index_h.clang_getClangVersion$MH(Index_h.java:5690)](mailto:org.openjdk.jextract at 22/org.openjdk.jextract.clang.libclang.Index_h.clang_getClangVersion$MH(Index_h.java:5690))
>         at [org.openjdk.jextract at 22/org.openjdk.jextract.clang.libclang.Index_h.clang_getClangVersion(Index_h.java:5698)](mailto:org.openjdk.jextract at 22/org.openjdk.jextract.clang.libclang.Index_h.clang_getClangVersion(Index_h.java:5698))
>         at [org.openjdk.jextract at 22/org.openjdk.jextract.clang.LibClang.version(LibClang.java:93)](mailto:org.openjdk.jextract at 22/org.openjdk.jextract.clang.LibClang.version(LibClang.java:93))
>         at [org.openjdk.jextract at 22/org.openjdk.jextract.JextractTool.run(JextractTool.java:362)](mailto:org.openjdk.jextract at 22/org.openjdk.jextract.JextractTool.run(JextractTool.java:362))
>         at [org.openjdk.jextract at 22/org.openjdk.jextract.JextractTool.main(JextractTool.java:174)](mailto:org.openjdk.jextract at 22/org.openjdk.jextract.JextractTool.main(JextractTool.java:174))
> 
> 
> The actual member is libclang.a(libclang.so.16)

Is this also needed for any other operating system? If not, I think the new code should only be used if `OperatingSystem.isAix()` (`import jdk.internal.util.OperatingSystem;`).

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/17945#discussion_r1530686989


More information about the core-libs-dev mailing list