8

use libcurl to writer some test code. when try to compile, it says undefined reference. already use -lcurl or -L compile option.

root@ubuntu:~/work/test/curlTest# curl-config --libs
-L/usr/lib/x86_64-linux-gnu -lcurl
root@ubuntu:~/work/test/curlTest# gcc -L/usr/lib/x86_64-linux-gnu -lcurl curl.c -o curl
/tmp/ccnFnpaW.o: In function `main':
curl.c:(.text+0xb1): undefined reference to `curl_global_init'
curl.c:(.text+0xbc): undefined reference to `curl_easy_init'
curl.c:(.text+0x109): undefined reference to `curl_easy_setopt'
curl.c:(.text+0x136): undefined reference to `curl_easy_setopt'
curl.c:(.text+0x145): undefined reference to `curl_easy_perform'
collect2: error: ld returned 1 exit status
timrau
  • 22,578
  • 4
  • 51
  • 64
hkx_1030
  • 153
  • 1
  • 3
  • 7

1 Answers1

20

-lcurl should be put in the end of gcc command.

gcc -L/usr/lib/x86_64-linux-gnu curl.c -o curl -lcurl
timrau
  • 22,578
  • 4
  • 51
  • 64
  • For me it was enough to simply move the -l option to the end of the command – zpon Jan 30 '16 at 09:37
  • Great, it worked for me. But I still don't know why the position of `-lcurl` matters. Why it failed before `-o` but work fine after `-o`? – Lane Aug 14 '18 at 03:34
  • 1
    It is because gcc **linking** is order-sensitive and that your *linked libraries* must follow the things that depend on. – behkod Jun 25 '19 at 08:52