This is an automated email from the ASF dual-hosted git repository.

jiashunzhu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-brpc.git


The following commit(s) were added to refs/heads/master by this push:
     new ded02c19 Fix _dl_sym undefined reference
     new f8314301 Merge pull request #1784 from wwbmmm/fix-dl-sym
ded02c19 is described below

commit ded02c195096a256752124241d3e72cf9e7cc339
Author: wangweibing <wangweib...@baidu.com>
AuthorDate: Tue Jun 7 14:57:45 2022 +0800

    Fix _dl_sym undefined reference
---
 src/bthread/mutex.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/bthread/mutex.cpp b/src/bthread/mutex.cpp
index 441bc6c8..e044eae2 100644
--- a/src/bthread/mutex.cpp
+++ b/src/bthread/mutex.cpp
@@ -44,7 +44,7 @@
 #include "bthread/log.h"
 
 extern "C" {
-extern void* _dl_sym(void* handle, const char* symbol, void* caller);
+extern void* __attribute__((weak)) _dl_sym(void* handle, const char* symbol, 
void* caller);
 }
 
 namespace bthread {
@@ -408,8 +408,14 @@ static void init_sys_mutex_lock() {
 #if defined(OS_LINUX)
     // TODO: may need dlvsym when GLIBC has multiple versions of a same symbol.
     // 
http://blog.fesnel.com/blog/2009/08/25/preloading-with-multiple-symbol-versions
-    sys_pthread_mutex_lock = (MutexOp)_dl_sym(RTLD_NEXT, "pthread_mutex_lock", 
(void*)init_sys_mutex_lock);
-    sys_pthread_mutex_unlock = (MutexOp)_dl_sym(RTLD_NEXT, 
"pthread_mutex_unlock", (void*)init_sys_mutex_lock);
+    if (_dl_sym) {
+        sys_pthread_mutex_lock = (MutexOp)_dl_sym(RTLD_NEXT, 
"pthread_mutex_lock", (void*)init_sys_mutex_lock);
+        sys_pthread_mutex_unlock = (MutexOp)_dl_sym(RTLD_NEXT, 
"pthread_mutex_unlock", (void*)init_sys_mutex_lock);
+    } else {
+        // _dl_sym may be undefined reference in some system, fallback to dlsym
+        sys_pthread_mutex_lock = (MutexOp)dlsym(RTLD_NEXT, 
"pthread_mutex_lock");
+        sys_pthread_mutex_unlock = (MutexOp)dlsym(RTLD_NEXT, 
"pthread_mutex_unlock");
+    }
 #elif defined(OS_MACOSX)
     // TODO: look workaround for dlsym on mac
     sys_pthread_mutex_lock = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_lock");


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org
For additional commands, e-mail: dev-h...@brpc.apache.org

Reply via email to