25

I am using GCC, what switches do I need to add to link with Xlib? After searching, all I could find was -lX11, but that gave me ld: library not found for -lX11

I am using a mac (10.6), but I would not like anything that is Mac specific.

Jeffrey Aylesworth
  • 7,630
  • 8
  • 37
  • 56

5 Answers5

39

You can usually use pkg-config to determine the flags you need to pass:

gcc my-program.c $(pkg-config --cflags --libs x11) -o my-program
Brian Campbell
  • 289,867
  • 55
  • 346
  • 327
  • Hey! I didn't know that was there. And I've always liked that kind of facility when individual programs supply it (e.g. `root-config` with http://root.cern.ch/). – dmckee --- ex-moderator kitten Dec 31 '09 at 01:27
  • Hmmm...mine seems to be supplied by fink (on Mac OS 10.5). – dmckee --- ex-moderator kitten Dec 31 '09 at 01:29
  • 14
    +1 : I love the answers when someone asks for a fish and gets a fishing rod in return :) – Kornel Kisielewicz Dec 31 '09 at 01:56
  • 2
    I'd like to point out that this answer didn't work for me on ubuntu (gcc 4.6.1). It places the -lX11 argument before the -o argument and since gcc searches object files and libraries in the order specified I still get 'undefined reference' errors. See also: [GCC documentation](http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Link-Options.html#Link-Options) – Andreas Raster Mar 15 '12 at 16:51
  • @rakete Fixed the order. The libraries need to come after the .c file, not after the -o argument, so I've left that at the end, just moved the .c file up before the library flags. – Brian Campbell Dec 05 '13 at 22:00
7
$ locate libX11
/Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/lib/libX11.6.2.dylib
/Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/lib/libX11.6.dylib
/Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/lib/libX11.a
/Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/lib/libX11.dylib
/Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/libX11.6.2.0.dylib
/Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/libX11.6.dylib
/Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/libX11.dylib
/usr/X11/lib/libX11.6.2.0.dylib
/usr/X11/lib/libX11.6.dylib
/usr/X11/lib/libX11.dylib
/usr/X11/lib/libX11.la

I'd try

gcc [...] -L/usr/X11/lib -lX11 [...]

to set the search path for libraries.

dmckee --- ex-moderator kitten
  • 90,531
  • 23
  • 129
  • 225
4

You'd be surprised, but sometimes -L/usr/X11R6/lib -lX11 is the answer -_-.

Kornel Kisielewicz
  • 51,225
  • 12
  • 100
  • 147
2

You also need -L/usr/X11/lib. It's not exactly Mac-specific, but you will find that the location of these libs will vary a bit from system to system.

bmargulies
  • 91,317
  • 38
  • 166
  • 290
1

Ubuntu 12.10 (And probably others) require sudo apt-get install libx11-dev.

Luca Stein
  • 93
  • 1
  • 1
  • 6