c++ - जीसीसी: अनिर्धारित संदर्भ




gcc linker (2)

मैं इसे संकलित करना चाहता हूं।

program.c

#include <libavcodec/avcodec.h>

int main(){
    int i = avpicture_get_size(AV_PIX_FMT_RGB24,300,300);
}

इसे चल रहा है

gcc -I$HOME/ffmpeg/include program.c

त्रुटि देता है

/tmp/ccxMLBme.o: In function `main':
program.c:(.text+0x18): undefined reference to `avpicture_get_size'
collect2: ld returned 1 exit status

हालांकि, avpicture_get_size परिभाषित किया गया है। ये क्यों हो रहा है?


हालांकि, avpicture_get_size परिभाषित किया गया है।

नहीं, हेडर के रूप में ( <libavcodec/avcodec.h> ) बस इसे घोषित करता है।

परिभाषा लाइब्रेरी में ही है।

इसलिए आप gcc का आह्वान करते समय libavcodec को लिंक करने के लिए लिंकर विकल्प जोड़ना चाहेंगे:

-lavcodec

कृपया यह भी ध्यान दें कि फ़ाइलों की आवश्यकता के बाद पुस्तकालयों को कमांड लाइन पर निर्दिष्ट करने की आवश्यकता है:

gcc -I$HOME/ffmpeg/include program.c -lavcodec

ऐसा नहीं है:

gcc -lavcodec -I$HOME/ffmpeg/include program.c

अद्यतन करें:

Wyzard की टिप्पणी का जिक्र करते हुए पूरा आदेश इस तरह दिख सकता है:

gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavcodec

लिंकर्स मानक स्थान में संग्रहीत पुस्तकालयों के लिए विकल्प -L -l विकल्प का उपयोग करके निर्दिष्ट लुकअप लाइब्रेरीज़ के लिए एक अतिरिक्त खोज पथ निर्दिष्ट करता है, जो इस मामले में libavcodec.xyz है।

जीसीसी के लिंकर विकल्प पर विस्तृत संदर्भ के लिए, कृपया यहां पढ़ें


क्या आप सी और सी ++ मिश्रण कर रहे हैं? एक मुद्दा यह हो सकता है कि .c फ़ाइल के लिए .h फ़ाइल में घोषणाओं से घिरा होना आवश्यक है:

#if defined(__cplusplus)
  extern "C" {                 // Make sure we have C-declarations in C++ programs
#endif

तथा:

#if defined(__cplusplus)
  }
#endif




undefined-reference