|
|
|
@ -205,8 +205,15 @@ def pre_load(dso_name):
|
|
|
|
|
load_dso(dso_path)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_glibc_ver():
|
|
|
|
|
return run_shell_command("ldd --version | awk '/ldd/{print $NF}'")
|
|
|
|
|
def get_libc_ver():
|
|
|
|
|
ldd_glibc = run_shell_command("ldd --version | awk '/ldd/{print $NF}'")
|
|
|
|
|
if ldd_glibc is not None:
|
|
|
|
|
return ("glibc", ldd_glibc)
|
|
|
|
|
|
|
|
|
|
ldd_musl = run_shell_command("ldd 2>&1 | awk '/Version/{print $NF}'")
|
|
|
|
|
if ldd_musl is not None:
|
|
|
|
|
return ("musl", ldd_musl)
|
|
|
|
|
return (None, None)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def less_than_ver(a, b):
|
|
|
|
@ -231,13 +238,14 @@ def less_than_ver(a, b):
|
|
|
|
|
# For paddle, the problem is that 'libgomp' is a DSO with static TLS, and it is loaded after 14 DSOs.
|
|
|
|
|
# So, here is a tricky way to solve the problem by pre load 'libgomp' before 'core_avx.so'.
|
|
|
|
|
# The final solution is to upgrade glibc to > 2.22 on the target system.
|
|
|
|
|
if platform.system().lower() == 'linux' and less_than_ver(get_glibc_ver(),
|
|
|
|
|
'2.23'):
|
|
|
|
|
try:
|
|
|
|
|
pre_load('libgomp')
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# NOTE(zhiqiu): do not abort if failed, since it may success when import core_avx.so
|
|
|
|
|
sys.stderr.write('Error: Can not preload libgomp.so')
|
|
|
|
|
if platform.system().lower() == 'linux':
|
|
|
|
|
libc_type, libc_ver = get_libc_ver()
|
|
|
|
|
if libc_type == 'glibc' and less_than_ver(libc_ver, '2.23'):
|
|
|
|
|
try:
|
|
|
|
|
pre_load('libgomp')
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# NOTE(zhiqiu): do not abort if failed, since it may success when import core_avx.so
|
|
|
|
|
sys.stderr.write('Error: Can not preload libgomp.so')
|
|
|
|
|
|
|
|
|
|
load_noavx = False
|
|
|
|
|
|
|
|
|
|