
我这边使用mesa3d驱动gpu的话无法运行render_server服务,手动运行的话直接报错如下信息,请问这个是mesa端的问题还是ohos的问题啊,麻烦知道的大佬指点下迷津
render_service
Error relocating /system/lib/platformsdk/librender_service_base.z.so: eglCreateImageKHR: symbol not found
Error relocating /system/lib/platformsdk/librender_service_base.z.so: glEGLImageTargetTexture2DOES: symbol not found
Error relocating /system/lib/platformsdk/librender_service_base.z.so: eglDestroyImageKHR: symbol not found

修改后运行的结果
Error relocating /system/lib/librender_service.z.so: eglCreateSyncKHR: symbol not found
Error relocating /system/lib/librender_service.z.so: eglWaitSyncKHR: symbol not found
Error relocating /system/lib/librender_service.z.so: eglDestroySyncKHR: symbol not found
Error relocating /system/lib/platformsdk/librender_service_base.z.so: glEGLImageTargetTexture2DOES: symbol not found

diff --git a/include/EGL/eglext.h b/include/EGL/eglext.h
index a3a4e3c7ab7..3f08bed412d 100644
--- a/include/EGL/eglext.h
+++ b/include/EGL/eglext.h
@@ -188,10 +188,10 @@ typedef void *EGLImageKHR;
#define EGL_NO_IMAGE_KHR EGL_CAST(EGLImageKHR,0)
typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image);
-#endif
+//#ifdef EGL_EGLEXT_PROTOTYPES
+__attribute ((visibility("default"))) EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
+__attribute ((visibility("default"))) EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image);
+//#endif
#endif /* EGL_KHR_image */
#ifndef EGL_KHR_image_base
diff --git a/include/GL/gl.h b/include/GL/gl.h
index e2f5408a5d5..93c6aaa6cd3 100644
--- a/include/GL/gl.h
+++ b/include/GL/gl.h
@@ -2085,10 +2085,8 @@ typedef void* GLeglImageOES;
#ifndef GL_OES_EGL_image
#define GL_OES_EGL_image 1
-#ifdef GL_GLEXT_PROTOTYPES
-GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image);
+__attribute ((visibility("default"))) GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image);
GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image);
-#endif
typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
#endif
diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index c1a1d8540af..c1561255b72 100644
--- a/src/egl/main/eglapi.c
+++ b/src/egl/main/eglapi.c
@@ -1764,7 +1764,7 @@ _eglCreateImageCommon(_EGLDisplay *disp, EGLContext ctx, EGLenum target,
RETURN_EGL_EVAL(disp, ret);
}
-static EGLImage EGLAPIENTRY
+__attribute ((visibility("default"))) EGLImage EGLAPIENTRY
eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target,
EGLClientBuffer buffer, const EGLint *attr_list)
{
@@ -1820,7 +1820,7 @@ eglDestroyImage(EGLDisplay dpy, EGLImage image)
return _eglDestroyImageCommon(disp, img);
}
-static EGLBoolean EGLAPIENTRY
+__attribute ((visibility("default"))) EGLBoolean EGLAPIENTRY
eglDestroyImageKHR(EGLDisplay dpy, EGLImage image)
{
_EGLDisplay *disp = _eglLockDisplay(dpy);

可以参考基于开源mesa3d的GPU驱动,OpenHarmony-4.x版本图形适配要点_AlgoIdeas-Laval社区 (csdn.net),或者自行编译Mesa3D库,将相关符号导出,举个例子:


