First, obviously error message is not correct, dll's are not used on linux. Message should give correct file name instead of prewritten one.
I have installed latest JLink 5.02g. And tried both 32 and 64 bit versions. I tried to see with strace what goes wrong, but it seems to me that nrfjprog reads successfully libjlinkarm_nrf51_nrfjprogdll.so but still decides to fail.
Here is tail of the strace output;
open("/opt/JLink_Linux_V502g_i386/libjlinkarm_nrf51_nrfjprogdll.so", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\20\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=55408, ...}) = 0 mmap(NULL, 2151920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f090bc92000 mprotect(0x7f090bc9f000, 2093056, PROT_NONE) = 0 mmap(0x7f090be9e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xc000) = 0x7f090be9e000 close(3) = 0 mprotect(0x7f090be9e000, 4096, PROT_READ) = 0 open("/opt/SEGGER/JLink/libnrfjprogdll.so.7", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\20\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=22640, ...}) = 0 mmap(NULL, 2118248, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f090ba8c000 mprotect(0x7f090ba91000, 2093056, PROT_NONE) = 0 mmap(0x7f090bc90000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0x7f090bc90000 close(3) = 0 mprotect(0x7f090bc90000, 4096, PROT_READ) = 0 munmap(0x7f090bc92000, 2151920) = 0 munmap(0x7f090bea0000, 2118248) = 0 write(2, "ERROR: JLinkARM.dll load failed."..., 71ERROR: JLinkARM.dll load failed. Try again. If it keeps failing, please) = 71 write(2, "\n", 1 ) = 1 write(2, "ERROR: reinstall latest JLinkARM"..., 57ERROR: reinstall latest JLinkARM.dll from Segger webpage.) = 57 write(2, "\n", 1 ) = 1 exit_group(32) = ?