diff --git a/python/paddle/fluid/core.py b/python/paddle/fluid/core.py index 5abfe1ed85d11b215deaffc8320680a0a8194d5d..cf2ae6fd362234ce663ea85a7b79dc47771e76ea 100644 --- a/python/paddle/fluid/core.py +++ b/python/paddle/fluid/core.py @@ -200,10 +200,16 @@ def pre_load(dso_name): load_dso(dso_path) -def get_glibc_ver(): - return "musl_" + run_shell_command("ldd 2>&1 | awk '/Version/{print $NF}'") - #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): if a is None or b is None: @@ -227,13 +233,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 False 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