"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية استدعاء وظائف مكتبة Linux المشتركة في Go؟

كيفية استدعاء وظائف مكتبة Linux المشتركة في Go؟

تم النشر بتاريخ 2024-11-08
تصفح:141

How to Call Linux Shared Library Functions in Go?

استدعاء وظائف مكتبة Linux المشتركة في Go

في هذا السؤال، يسعى المطور للحصول على المساعدة في استدعاء الوظائف من كائن مشترك (.so) ملف داخل رمز Go الخاص بهم. تعمل حزمة ctypes في Python، والتي تتيح الوصول إلى وظائف C، بمثابة الوظيفة المطلوبة.

استخدام cgo لتحميل المكتبة المشتركة الثابتة

لاستدعاء الوظائف بشكل ثابت مكتبة مشتركة معروفة في وقت الترجمة، يمكن للمرء استخدام حزمة CGO. فيما يلي مثال للوصول إلى وظيفة bar() من libfoo.so:

package example

// #cgo LDFLAGS: -lfoo
//

#include 

import "C"

func main() {
    C.bar()
}

تحميل المكتبة المشتركة الديناميكية باستخدام cgo

وبدلاً من ذلك، يمكن لـ cgo تسهيل الوصول إلى الكائنات المشتركة التي يتم تحميلها ديناميكيًا في وقت التشغيل. يحتاج المرء إلى استخدام الوظائف dlopen() وdlsym() وdl Close() لفتح المكتبة المشتركة واسترداد عناوين الوظائف وإغلاق المكتبة. ومع ذلك، هذه الوظائف غير مدعومة أصلاً بواسطة Go وتتطلب برنامج تضمين C لتنفيذ المنطق الضروري.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3