سؤال

كتبت برنامج اختبار مثل هذا:

#include <sys/socket.h>
int main( void ) {
    int  sock = socket(AF_INET, SOCK_DGRAM, 0);
    return 0;
}

وحاول تجميعه:

$ /tool/sunstudio/bin/cc test.c
Undefined                       first referenced
 symbol                             in file
socket                              test.o
ld: fatal: Symbol referencing errors. No output written to a.out

الإخراج هو "لم يتم الرجوع إلى مقبس الرمز".

يرجى إعطائي الاتجاه حتى أتمكن من حل هذا.

هل كانت مفيدة؟

المحلول

هذا هو السؤال.

كتبت برنامج اختبار مثل هذا:

#include <sys/socket.h>
int main( void ) {
    int  sock = socket(AF_INET, SOCK_DGRAM, 0);
    return 0;
}

وحاولت تجميعها (هذا هو الإخراج الذي يساعد حقًا ، عليك أن تتذكر أن المجمعين الحديثين يبذلون قصارى جهدهم لمساعدتك في إصلاح أي مشاكل):

$ /tool/sunstudio/bin/cc test.c
Undefined                       first referenced
 symbol                             in file
socket                              test.o
ld: fatal: Symbol referencing errors. No output written to a.out

الآن ، من الإخراج يمكننا أن نرى أن الرمز socket لم يتم الرجوع إليه. لذلك إذا كتبت man socket سوف تحصل على ما يلي من صفحة الرجل:

SYNOPSIS
     cc [ flag ... ] file ... -lsocket  -lnsl  [ library ... ]

ال -l يشير العلم إلى أنه لاستخدام هذه الوظيفة ، تحتاج أيضًا إلى ربط المكتبة المسماة. في هذه الحالة ، يُطلب منك إضافة -lsocket -lnsl إلى cc سطر الأوامر على النحو التالي:

$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl

نصائح أخرى

يجب عليك الارتباط في مكتبة المقبس ، في سطر الأوامر:

-lsocket 

تحتاج إلى إضافة على الأقل -lsocket إلى خطوة الارتباط الخاصة بك ، IE رابط مع libsocket.so. لا أعرف كيف أفعل ذلك في Sunstudio UI ، على الرغم من ذلك - هل تعتمد مشاريعها؟

عادة ما تكون صفحة الرجل مكانًا جيدًا للبحث عن المكتبات المطلوبة ؛ في هذه الحالة صفحة رجل للمقبس يوصي أيضا -lnsl (انظر الملخص) بحيث قد يكون ذلك مطلوبًا أيضًا ، لكنني لا أتذكر أنه ضروري.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top