jafarlihi / connmap

connmap is an X11 desktop widget that shows location of your current network peers on a world map
MIT License
310 stars 12 forks source link

build error on debian #3

Closed jbalintbiro closed 4 years ago

jbalintbiro commented 4 years ago

after installing libcairo-dev and libx11-dev

~/src/connmap $ make install
mkdir -p ./build
gcc -std=gnu11 -I./includes -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -lcairo -lX11 -O0 ./build/geo.o ./build/ss.o ./build/cairo.o ./build/x11.o ./build/main.o ./build/ip.o ./build/config.o -o connmap.exe
/usr/bin/ld: ./build/cairo.o: in function `draw_invisible_point':
cairo.c:(.text+0x14): undefined reference to `cairo_create'
/usr/bin/ld: cairo.c:(.text+0x3c): undefined reference to `cairo_set_source_rgba'
/usr/bin/ld: cairo.c:(.text+0x54): undefined reference to `cairo_set_line_width'
/usr/bin/ld: cairo.c:(.text+0x84): undefined reference to `cairo_arc'
/usr/bin/ld: cairo.c:(.text+0x90): undefined reference to `cairo_fill'
/usr/bin/ld: cairo.c:(.text+0x9c): undefined reference to `cairo_destroy'
/usr/bin/ld: ./build/cairo.o: in function `draw_world':
cairo.c:(.text+0xbb): undefined reference to `cairo_create'
/usr/bin/ld: cairo.c:(.text+0xcb): undefined reference to `cairo_image_surface_create_from_png'
/usr/bin/ld: cairo.c:(.text+0xea): undefined reference to `cairo_set_source_surface'
/usr/bin/ld: cairo.c:(.text+0xf6): undefined reference to `cairo_paint'
/usr/bin/ld: cairo.c:(.text+0x102): undefined reference to `cairo_destroy'
/usr/bin/ld: ./build/cairo.o: in function `draw_point':
cairo.c:(.text+0x134): undefined reference to `cairo_create'
/usr/bin/ld: cairo.c:(.text+0x174): undefined reference to `cairo_set_source_rgba'
/usr/bin/ld: cairo.c:(.text+0x18c): undefined reference to `cairo_set_line_width'
/usr/bin/ld: cairo.c:(.text+0x1d6): undefined reference to `cairo_arc'
/usr/bin/ld: cairo.c:(.text+0x206): undefined reference to `cairo_arc'
/usr/bin/ld: cairo.c:(.text+0x212): undefined reference to `cairo_fill'
/usr/bin/ld: cairo.c:(.text+0x21e): undefined reference to `cairo_destroy'
/usr/bin/ld: ./build/cairo.o: in function `clear_surface':
cairo.c:(.text+0x239): undefined reference to `cairo_create'
/usr/bin/ld: cairo.c:(.text+0x259): undefined reference to `cairo_set_source_rgba'
/usr/bin/ld: cairo.c:(.text+0x26a): undefined reference to `cairo_set_operator'
/usr/bin/ld: cairo.c:(.text+0x276): undefined reference to `cairo_paint'
/usr/bin/ld: cairo.c:(.text+0x282): undefined reference to `cairo_destroy'
/usr/bin/ld: ./build/x11.o: in function `initX11':
x11.c:(.text+0x2d): undefined reference to `XOpenDisplay'
/usr/bin/ld: x11.c:(.text+0xb2): undefined reference to `XCreateColormap'
/usr/bin/ld: x11.c:(.text+0x16b): undefined reference to `XCreateWindow'
/usr/bin/ld: x11.c:(.text+0x186): undefined reference to `XLowerWindow'
/usr/bin/ld: x11.c:(.text+0x199): undefined reference to `XMapWindow'
/usr/bin/ld: ./build/main.o: in function `main':
main.c:(.text+0x190): undefined reference to `cairo_xlib_surface_create'
/usr/bin/ld: main.c:(.text+0x1a8): undefined reference to `cairo_xlib_surface_set_size'
collect2: error: ld returned 1 exit status
make: *** [Makefile:28: build] Error 1
jafarlihi commented 4 years ago

Seems related to #1

Frankly I have no idea why it fails, it works fine on Arch Linux.

khalilfazal commented 4 years ago

Try installing libcairo2.
You need to have libcairo.so.2 available.

ldd ./connmap.exe
...
    libcairo.so.2 => /usr/lib/libcairo.so.2 (0x00007f5fe7851000)`
jbalintbiro commented 4 years ago

Hi, thanks for the advice, but libcairo2 is already installed as a dependency of libcairo-dev, and the build process dies with a link error so i can't run ldd on the executable.

I did a bit of looking around /usr/lib/libcairo.so.2 doesn't exist on my system (it's sid), it's /usr/lib/x86_64-linux-gnu/libcairo.so.2, so maybe the solution is looking up the right paths with pkg-conf?

jbalintbiro commented 4 years ago

So the real problem is that for some reason you have to put the program objects before cario at link time.