我正在尝试编写一些访问glibc的JNA代码,特别是在mmap.h
中定义的功能。
我尝试完全按照man shm_open
中的定义进行定义。 getuid()
函数在其起作用之前即已调用,但shm_open
不会返回。
我只能使用JNA 4.4.0和JNA Platform 3.4.0。
interface LibC extends Library {
LibC INSTANCE = Native.loadLibrary("c", LibC.class);
int shm_open(String name, int oFlag, int mode);
}
// ...
int fileDescriptor = LibC.INSTANCE.shm_open("/some_memory.123", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
// ...
我希望返回文件描述符,但是我遇到了以下异常:
java.lang.UnsatisfiedLinkError: Error looking up function 'shm_open': /lib/x86_64-linux-gnu/libc.so.6: undefined symbol: shm_open
java.lang.UnsatisfiedLinkError: Error looking up function 'shm_open': /usr/lib/jvm/java-8-openjdk-amd64/bin/java: undefined symbol: shm_open
答案 0 :(得分:1)
好吧,我在写问题时就发现了问题。
在getuid()
中定义了libc
和朋友,在shm_open
中定义了librt
和朋友。我确实应该意识到,因为shm_open
的联机帮助页明确声明“与-lrt
链接”,表明它位于“ rt”库中。
简而言之:我需要一个与LibC一起的LibRT新接口,并以rt
的名称加载。