Undefined Reference - on.. well, just about everything

30 views
Skip to first unread message

Roger Tunnicliffe

unread,
Oct 31, 2025, 2:59:20 AMOct 31
to fltk.general
Hi,
Hope someone can help, I'm sure this is a simple one..
I have downloaded and installed version 1.4.4 and have the statically linked files here...

roger@UPSTAIRS-LENOVO:~/_dev1/source/freeBASIC/_FLTK$ ls -la
-rw-r--r--  1 roger roger 4154580 Oct 31 12:00 libfltk.a
-rw-r--r--  1 roger roger    1488 Oct 31 11:36 libfltk_cairo.a
-rw-r--r--  1 roger roger   57554 Oct 31 12:00 libfltk_forms.a
-rw-r--r--  1 roger roger  523300 Oct 31 12:00 libfltk_gl.a
-rw-r--r--  1 roger roger  376384 Oct 31 12:00 libfltk_images.a
-rw-r--r--  1 roger roger  359924 Oct 31 11:35 libfltk_jpeg.a

I have downloaded an example program for freeBasic here...

' freeBASIC will look for libfltk.a when you code fltk'
#libpath "/home/roger/_dev1/source/freeBASIC/_FLTK/"
#inclib "fltk"
#inclib "fltk_cairo"
#inclib "fltk_forms"
#inclib "fltk_gl"
#inclib "fltk_images"
#inclib "fltk_jpeg"
#include once "_FLTK/Fl_Window.bi"
#include once "_FLTK/Fl_Button.bi"

dim w as Fl_Window = Fl_Window(940,380,"Window")
  dim b as Fl_button = Fl_button(10,30,150,30,"This is a button")
w.end_()
w.show
fl.run_

but with a compile (fbc fltk.bas) I am getting hundreds and hundreds of Undefined Reference errors:- Here's one of them

ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(xdg-shell-protocol.o):(.data.rel.xdg_shell_types+0x60): undefined reference to `wl_seat_interface'

I am sure this is a simple setup error but I wonder if someone could point me in the right direction. 
Many Thx
Roger

Matthias Melcher

unread,
Oct 31, 2025, 9:30:45 AMOct 31
to fltk.general
`wl_seat_interface` is a Wayland function. You either need to link your app with the Wayland developer libraries as well, or you can compile FLTK to use X11 (assuming you are on Linux). I have no experience with freeBASIC unfortunately, so I can't give you the exact commands.

Wayland support was added in 1.4. You can disable it by building with:

cmake -DFLTK_BACKEND_WAYLAND=off -DFLTK_BACKEND_X11=on ...

-DFLTK_BACKEND_X11=on is the default, so you can omit that. It's here for illustration.

Roger Tunnicliffe

unread,
Oct 31, 2025, 6:08:18 PMOct 31
to fltk.general

Thx Matthias, I think we are getting somewhere but I still have Undefined References. 

ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_x.cxx.o): in function `open_display_i(_XDisplay*)':
Fl_x.cxx:(.text+0x1335): undefined reference to `XFixesQueryExtension'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_x.cxx.o): in function `Fl_X::make_xid(Fl_Window*, XVisualInfo*, unsigned long)':
Fl_x.cxx:(.text+0x761c): undefined reference to `XFixesSelectSelectionInput'
ld: Fl_x.cxx:(.text+0x7641): undefined reference to `XFixesSelectSelectionInput'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_x.cxx.o): in function `Fl_X11_Window_Driver::set_cursor(Fl_RGB_Image const*, int, int)':
Fl_x.cxx:(.text+0x85c2): undefined reference to `XcursorImageCreate'
ld: Fl_x.cxx:(.text+0x886a): undefined reference to `XcursorImageLoadCursor'
ld: Fl_x.cxx:(.text+0x88b9): undefined reference to `XcursorImageDestroy'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_Xlib_Graphics_Driver_font_xft.cxx.o): in function `Fl_Xlib_Graphics_Driver::set_fonts(char const*)':
Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x69e): undefined reference to `FcInit'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x6b6): undefined reference to `FcPatternCreate'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x6d7): undefined reference to `FcObjectSetBuild'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x6f0): undefined reference to `FcFontList'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x700): undefined reference to `FcPatternDestroy'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x70c): undefined reference to `FcObjectSetDestroy'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x767): undefined reference to `FcNameUnparse'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x89f): undefined reference to `FcFontSetDestroy'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_Xlib_Graphics_Driver_font_xft.cxx.o): in function `fontopen(char const*, double, bool, int)':
Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xa85): undefined reference to `FcPatternCreate'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xb57): undefined reference to `FcPatternAddString'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xbdb): undefined reference to `FcPatternAddString'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xbf1): undefined reference to `FcPatternAddInteger'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xc07): undefined reference to `FcPatternAddInteger'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xc26): undefined reference to `FcPatternAddDouble'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xc40): undefined reference to `FcPatternAddString'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xd12): undefined reference to `FcMatrixRotate'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xd2c): undefined reference to `FcPatternAddMatrix'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xd4d): undefined reference to `FcPatternAddBool'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xd65): undefined reference to `FcPatternAddBool'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xd82): undefined reference to `XftFontMatch'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xda3): undefined reference to `XftFontOpenPattern'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xdfd): undefined reference to `XftFontOpen'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xe11): undefined reference to `FcPatternDestroy'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xe49): undefined reference to `FcPatternDestroy'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0xe9f): undefined reference to `XftFontOpenXlfd'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_Xlib_Graphics_Driver_font_xft.cxx.o): in function `utf8extents(Fl_Xlib_Font_Descriptor*, char const*, int, _XGlyphInfo*)':
Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1095): undefined reference to `XftTextExtents32'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_Xlib_Graphics_Driver_font_xft.cxx.o): in function `fl_xft_width(Fl_Font_Descriptor*, unsigned int*, int)':
Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x11e5): undefined reference to `XftTextExtents32'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_Xlib_Graphics_Driver_font_xft.cxx.o): in function `Fl_Xlib_Graphics_Driver::draw_unscaled(char const*, int, int, int)':
Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1450): undefined reference to `XftDrawCreate'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1480): undefined reference to `XftDrawChange'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x14ca): undefined reference to `XftDrawSetClip'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1591): undefined reference to `XftDrawString32'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_Xlib_Graphics_Driver_font_xft.cxx.o): in function `Fl_Xlib_Graphics_Driver::drawUCS4(void const*, int, int, int)':
Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x16c8): undefined reference to `XftDrawCreate'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x16f8): undefined reference to `XftDrawChange'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1742): undefined reference to `XftDrawSetClip'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1845): undefined reference to `XftDrawString32'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_Xlib_Graphics_Driver_font_xft.cxx.o): in function `Fl_Xlib_Graphics_Driver::rtl_draw_unscaled(char const*, int, int, int)':
Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x190a): undefined reference to `FcUtf8Len'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x19b0): undefined reference to `FcUtf8ToUcs4'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_Xlib_Graphics_Driver_font_xft.cxx.o): in function `Fl_Xlib_Graphics_Driver::get_font_sizes(int, int*&)':
Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1ae3): undefined reference to `XftListFonts'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1bae): undefined reference to `FcPatternGetDouble'
ld: Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1c15): undefined reference to `FcFontSetDestroy'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_Xlib_Graphics_Driver_font_xft.cxx.o): in function `Fl_Xlib_Graphics_Driver::destroy_xft_draw(unsigned long)':
Fl_Xlib_Graphics_Driver_font_xft.cxx:(.text+0x1e9e): undefined reference to `XftDrawChange'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_X11_Screen_Driver.cxx.o): in function `Fl_X11_Screen_Driver::init()':
Fl_X11_Screen_Driver.cxx:(.text+0x8c5): undefined reference to `XineramaIsActive'
ld: Fl_X11_Screen_Driver.cxx:(.text+0x8ec): undefined reference to `XineramaQueryScreens'

Matthias Melcher

unread,
Oct 31, 2025, 6:20:33 PMOct 31
to fltk.general
On Linux, FLTK needs the following additional libraries (see README.Unix.txt):
"

  sudo apt-get install g++

  sudo apt-get install gdb

  sudo apt-get install git

  sudo apt-get install make

  sudo apt-get install cmake      # install CMake...

  sudo apt-get install autoconf   # ...or autoconf (or both)

  sudo apt-get install libx11-dev

  sudo apt-get install libglu1-mesa-dev

  sudo apt-get install libxft-dev

  sudo apt-get install libxcursor-dev


These packages are optional but recommended:


  sudo apt-get install libasound2-dev

  sudo apt-get install freeglut3-dev

  sudo apt-get install libcairo2-dev

  sudo apt-get install libfontconfig1-dev

  sudo apt-get install libglew-dev

  sudo apt-get install libjpeg-dev

  sudo apt-get install libpng-dev

  sudo apt-get install libpango1.0-dev

  sudo apt-get install libxinerama-dev

"
If you want to support Wayland too, FLTK needs (see README.Wayland.txt):
"

These packages are necessary to build the FLTK library, in addition to

package groups listed in section 2.2 of file README.Unix.txt :

- autoconf

- wayland-devel

- wayland-protocols-devel

- cairo-devel

- libxkbcommon-devel

- pango-devel

- mesa-libGLU-devel

- dbus-devel     <== recommended to query current cursor theme

- libdecor-devel <== recommended, draws window titlebars

- gtk3-devel     <== highly recommended if libdecor-devel is not installed

- glew-devel     <== necessary to use OpenGL version 3 or above

- cmake          <== if you plan to build with CMake

- cmake-gui      <== if you plan to use the GUI of CMake


Package installation command: sudo yum install <package-name ...>

"

Albrecht Schlosser

unread,
Oct 31, 2025, 6:28:45 PMOct 31
to fltkg...@googlegroups.com
On 10/31/25 21:41 Roger Tunnicliffe wrote:

Thx Matthias, I think we are getting somewhere but I still have Undefined References. 

ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_x.cxx.o): in function `open_display_i(_XDisplay*)':
Fl_x.cxx:(.text+0x1335): undefined reference to `XFixesQueryExtension'
ld: /home/roger/_dev1/source/freeBASIC/_FLTK/libfltk.a(Fl_x.cxx.o): in function `Fl_X::make_xid(Fl_Window*, XVisualInfo*, unsigned long)':
Fl_x.cxx:(.text+0x761c): undefined reference to `XFixesSelectSelectionInput'

[...]

Well, "manually" linking all required libs can be a nightmare. It would be much easier if you could use CMake ...

Anyway, if you built FLTK yourself (as I assume from your first message), then you should be able to execute `fltk-config` with two different commandline flags. The former displays the compiler flags, the latter the linker flags (and thus the libraries you need to link).

Depending on your build configuration this should look similar to this (on my system, paths edited for clarity):

/path/to/fltk/fltk-config --cxxflags
-I/path/to/fltk/include -I/path/to/fltk/include/FL/images -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE -D_REENTRANT -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/freetype2 -I/usr/include/libpng16

/path/to/fltk/fltk-config --ldstaticflags
/path/to/fltk/lib/libfltk.a -lm -lX11 -lXext -lpthread -lXinerama -lXfixes -lXcursor -L/usr/lib/x86_64-linux-gnu -lpangocairo-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lharfbuzz -lcairo -lgtk-3 -lgdk-3 -lz -latk-1.0 -lcairo-gobject -lgdk_pixbuf-2.0 -lgio-2.0 -lXrender -lwayland-cursor -lwayland-client -lxkbcommon -ldbus-1 -lfontconfig -ldl


Whatever you find on your system should give you enough hints to find the required flags and libraries to configure your build. Hopefully.

Adjust paths and libs as needed.

Roger Tunnicliffe

unread,
Oct 31, 2025, 8:13:36 PMOct 31
to fltk.general
I did use CMake...
What I posted was the ouput from it

Albrecht Schlosser

unread,
Oct 31, 2025, 8:47:06 PMOct 31
to fltkg...@googlegroups.com
On 11/1/25 01:05 Roger Tunnicliffe wrote:
I did use CMake...
What I posted was the ouput from it

Oh, that's unexpected. Did you use CMake to ...

(a) build and install FLTK  *and*
(b) build your (Basic) application?

I assumed that the first part of your posted "code" was a kind of build tool setup.
Is this part:


#libpath "/home/roger/_dev1/source/freeBASIC/_FLTK/"
#inclib "fltk"
#inclib "fltk_cairo"
#inclib "fltk_forms"
#inclib "fltk_gl"
#inclib "fltk_images"
#inclib "fltk_jpeg"

included in your Basic code?

OK, let's go back one step. If you used CMake to build your application, then we should take a look at your CMakeLists.txt file, but before we do that:

You wrote:

> I have downloaded and installed version 1.4.4 ...

Just to be sure, what you posted doesn't look like a proper install of FLTK. As you can see from the output in my last post, the library files should be in a subdirectory 'lib' and the header files should be in 'include/FL' relative to the FLTK install directory. And there should be some more CMake support files below `_FLTK/`.

So what you should do (or have done):

1) build FLTK in a separate path from the FLTK source path. It would be fine to build it in the 'build' subdirectory of the FLTK source tree.
2) [optionally] install FLTK with CMake, like this:

  $ mkdir build
  $ cd build
  $ cmake .. -G Ninja -D CMAKE_BUILD_TYPE=Debug -D CMAKE_INSTALL_PREFIX="/home/roger/_dev1/source/freeBASIC/_FLTK" [more opotions...]
  $ cmake --build .
  $ cmake --install .

Note: commands untested, it's really late here. More tomorrow if you need further help.

These commands should install all required files below the _FLTK dir as mentioned above.

The CMakeLists.txt file used to build your application should include the line

  find_package(FLTK 1.4 CONFIG REQUIRED)

For details see README.CMake.txt, around lines 900 ff. (in FLTK 1.4).

If this works, then CMake *should* "know" which libraries are required by FLTK and include these in the build.

If you have any doubts, please post your CMakeLists.txt file.

Good luck!


--
You received this message because you are subscribed to the Google Groups "fltk.general" group.
To unsubscribe from this group and stop receiving emails from it, send an email to fltkgeneral...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/fltkgeneral/2ae2eab5-063d-4eca-baeb-f3a2f448e45dn%40googlegroups.com.

Roger Tunnicliffe

unread,
Oct 31, 2025, 9:27:06 PMOct 31
to fltk.general
Thx Albrecht

I found what was required. These are the additional libraries I needed to link (for this particular program)
I assume there may be more for a more detailed program but in the future I will know what to look for.
Many Thx
Cheers
Roger


' freeBASIC will look for libfltk.a when you code fltk'
#libpath "/home/roger/_dev1/source/freeBASIC/_FLTK/"
#inclib "fltk"
#inclib "Xft "
#inclib "fontconfig "
#inclib "Xcursor"
#inclib "Xfixes "

Reply all
Reply to author
Forward
0 new messages