לדלג לתוכן

פתרון קישור וטעינה

הפקודות הבאות מבודדות את שני שלבי החיפוש. הנתיב הראשון חייב להכיל את הספרייה בזמן הבנייה, ואילו ההפעלה השנייה מגדירה את חיפוש זמן הריצה עבור הניסוי בלבד.

rustc --edition=2024 main.rs -L ./native -l dylib=scale -o demo
LD_LIBRARY_PATH="$PWD/native" ./demo
readelf -d demo
readelf --dyn-syms native/libscale.so

הפונקציה הפנימית יכולה להישאר static בסי אם היא משמשת רק באותו קובץ. כאשר נדרש סימבול בין קובצי האובייקט אבל לא בממשק הציבורי, אפשר להשתמש במדיניות visibility של הבנייה ולסמן את הסימבולים הציבוריים במפורש.

#include <stdint.h>
static uint64_t multiply(uint32_t value) { return (uint64_t)value * 7; }
uint64_t scale_value(uint32_t value) { return multiply(value); }

הארכיון הסטטי מספק את גוף הפונקציה של הדוגמה בלבד. קוד ההפעלה של ראסט וספריות מערכת אחרות עדיין יכולים לדרוש interpreter ותלויות דינמיות. ההוכחה נמצאת בכותרות הבינארי שנוצר ולא בשם שנתנו לו.