Search code examples
dependency-managementlazarusdebian-packaging

Can I prevent Lazarus from linking my program to unnecessary libs?


I'm trying to package a GUI program built with Lazarus into a Debian package, and get the following messages:

dpkg-shlibdeps: warning: package could avoid a useless dependency if program_name was not linked against libgmodule-2.0.so.0 (it uses none of the library's symbols)

dpkg-shlibdeps: warning: package could avoid a useless dependency if program_name was not linked against libcairo.so.2 (it uses none of the library's symbols)

dpkg-shlibdeps: warning: package could avoid a useless dependency if program_name was not linked against libatk-1.0.so.0 (it uses none of the library's symbols)

My current compiler options are:

Info: (lazarus) Executable="/usr/bin/fpc"
Info: (lazarus) Param[0]="-MObjFPC"
Info: (lazarus) Param[1]="-Scghi"
Info: (lazarus) Param[2]="-CX"
Info: (lazarus) Param[3]="-O3"
Info: (lazarus) Param[4]="-Xs"
Info: (lazarus) Param[5]="-XX"
Info: (lazarus) Param[6]="-l"
Info: (lazarus) Param[7]="-vewnhibq"
Info: (lazarus) Param[8]="-Fi/path/to/program_folder/lib/arm-linux"
Info: (lazarus) Param[9]="-Fu/path/to/program_folder/TLazSerial/lib/arm-linux"
Info: (lazarus) Param[10]="-Fu/usr/lib/lazarus/2.0.10/components/ideintf/units/arm-linux/gtk2"
Info: (lazarus) Param[11]="-Fu/usr/lib/lazarus/2.0.10/components/lazcontrols/lib/arm-linux/gtk2"
Info: (lazarus) Param[12]="-Fu/usr/lib/lazarus/2.0.10/lcl/units/arm-linux/gtk2"
Info: (lazarus) Param[13]="-Fu/usr/lib/lazarus/2.0.10/lcl/units/arm-linux"
Info: (lazarus) Param[14]="-Fu/usr/lib/lazarus/2.0.10/components/lazutils/lib/arm-linux"
Info: (lazarus) Param[15]="-Fu/usr/lib/lazarus/2.0.10/packager/units/arm-linux"
Info: (lazarus) Param[16]="-Fu/path/to/program_folder/"
Info: (lazarus) Param[17]="-FU/path/to/program_folder/lib/arm-linux/"
Info: (lazarus) Param[18]="-FE/path/to/program_folder/"
Info: (lazarus) Param[19]="-o/path/to/program_folder/program_name"
Info: (lazarus) Param[20]="-dUseCThreads"
Info: (lazarus) Param[21]="-dLCL"
Info: (lazarus) Param[22]="-dLCLgtk2"
Info: (lazarus) Param[23]="program_name.lpr"

Is there a way to prevent my program from being linked against the libraries I don't use?


Solution

  • I think these are not useless. Probably Lazarus simply links to all GTK libs (for e.g. static linking order purposes). These libs are used indirectly via GTK anyway.

    So the warning is not strictly wrong, but also not strictly 100% correct.