undefined reference to gdImageString - undefined-reference

I'm trying to compile a program called Contrafold and I need two libraries (libgd and libpng), the problem is a link the libraries but it through me an undefined reference error, I don't know why....My code to compile is the follow:
g++ -O3 -DNDEBUG -W -pipe -Wundef -Winline --param large-function-growth=100000 -Wall EncapsulatedPostScript.o PlotRNA.o SStruct.o Utilities.o -o plot_rna -lm -L/path-to-library/libgd.a -L/path-to-library/libpng16.a
and the errors are:
PlotRNA.cpp:(.text+0x189e): undefined reference to `gdImageString'
PlotRNA.cpp:(.text+0x1a34): undefined reference to `gdImageFilledArc'
PlotRNA.cpp:(.text+0x1a79): undefined reference to `gdImageSetAntiAliased'
PlotRNA.cpp:(.text+0x1ad6): undefined reference to `gdImageChar'
PlotRNA.cpp:(.text+0x1c76): undefined reference to `gdImageLine'
PlotRNA.cpp:(.text+0x1fce): undefined reference to `gdImageString'
PlotRNA.cpp:(.text+0x2036): undefined reference to `gdImageCreateTrueColor'
PlotRNA.cpp:(.text+0x2079): undefined reference to `gdImageColorAllocate'
PlotRNA.cpp:(.text+0x2093): undefined reference to `gdImageColorAllocate'
PlotRNA.cpp:(.text+0x213a): undefined reference to `gdImageColorAllocate'
PlotRNA.cpp:(.text+0x217d): undefined reference to `gdImageFilledRectangle'
PlotRNA.cpp:(.text+0x2182): undefined reference to `gdFontGetMediumBold'
PlotRNA.cpp:(.text+0x218f): undefined reference to `gdFontGetSmall'
PlotRNA.cpp:(.text+0x223b): undefined reference to `gdImagePng'
PlotRNA.cpp:(.text+0x2250): undefined reference to `gdImageDestroy'
Any options?

Probably you forgot to add linking with library containing gd* functions: -lgd

Related

gcc can't find the linking lldap libraries even with -Llibrary-path specified, why?

I have a smal testing program to test ldap. I tried to compile it on Ubuntu 19.04. I have the source file called myldaptest.c, I ran:
1.gcc -c myldaptest.c
2.gcc -L/usr/lib/x86_64-linux-gnu -lldap -llber -o myldaptest myldaptest.o
then the it complains:
/usr/bin/ld: ldapsearch-sync.o: in function main':
ldapsearch-sync.c:(.text.startup+0x236): undefined reference toldap_url_parse'
/usr/bin/ld: ldapsearch-sync.c:(.text.startup+0x30b): undefined reference to ldap_initialize'
/usr/bin/ld: ldapsearch-sync.c:(.text.startup+0x33a): undefined reference toldap_set_option'
/usr/bin/ld: ldapsearch-sync.c:(.text.startup+0x374): undefined reference to ldap_set_option'
/usr/bin/ld: ldapsearch-sync.c:(.text.startup+0x3a3): undefined reference toldap_set_option'
/usr/bin/ld: ldapsearch-sync.c:(.text.startup+0x3ea): undefined reference to ldap_set_option'
/usr/bin/ld: ldapsearch-sync.c:(.text.startup+0x422): undefined reference toldap_set_option'
...
collect2: error: ld returned 1 exit status
who can tell me why?

gcc and ld is refusing to link library statically

Just for fun (and for learning compiling in general), I gave myself the task to build a xorg-server with all libraries statically linked, except for glibc. For some reason, gcc simply ignores some of my static libraries.
When I run something like this (last 2 lines are the relevant ones):
gcc -DHAVE_DIX_CONFIG_H -Wall -Wpointer-arith -Wmissing-declarations -Wformat=2 -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wbad-function-cast \
-Wold-style-definition -Wdeclaration-after-statement -Wunused -Wuninitialized -Wshadow -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls \
-Wlogical-op -Werror=implicit -Werror=nonnull -Werror=init-self -Werror=main -Werror=missing-braces -Werror=sequence-point -Werror=return-type -Werror=trigraphs \
-Werror=array-bounds -Werror=write-strings -Werror=address -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast -fno-strict-aliasing -fno-strict-aliasing \
-D_DEFAULT_SOURCE -D_BSD_SOURCE -DHAS_FCHOWN -DHAS_STICKY_DIR_BIT -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 \
-I/usr/include/X11/dri -I../../include -I../../include -I../../Xext -I../../composite -I../../damageext -I../../xfixes -I../../Xi -I../../mi -I../../miext/sync \
-I../../miext/shadow -I../../miext/damage -I../../render -I../../randr -I../../fb -I../../dbe -I../../present -fvisibility=hidden -DHAVE_XORG_CONFIG_H \
-fvisibility=hidden -I/usr/include/libdrm -g -O2 -pthread -o Xorg sdksyms.o \
/lib/arm-linux-gnueabihf/libz.a ../../dix/.libs/libmain.a ../../dix/.libs/libdix.a loader/.libs/libloader.a common/.libs/libcommon.a os-support/.libs/libxorgos.a \
parser/.libs/libxf86config.a dixmods/.libs/libdixmods.a modes/.libs/libxf86modes.a ramdac/.libs/libramdac.a ddc/.libs/libddc.a i2c/.libs/libi2c.a \
../../composite/.libs/libcomposite.a ../../xfixes/.libs/libxfixes.a ../../Xext/.libs/libXext.a ../../dbe/.libs/libdbe.a ../../record/.libs/librecord.a \
../../randr/.libs/librandr.a ../../render/.libs/librender.a ../../damageext/.libs/libdamageext.a ../../present/.libs/libpresent.a \
../../miext/damage/.libs/libdamage.a ../../Xi/.libs/libXi.a ../../xkb/.libs/libxkb.a xkb/.libs/libxorgxkb.a dri/.libs/libdri.a dri2/.libs/libdri2.a \
../../dri3/.libs/libdri3.a ../../glx/.libs/libglxvnd.a ../../miext/sync/.libs/libsync.a ../../mi/.libs/libmi.a ../../os/.libs/libos.a -lcrypto \
../../Xext/.libs/libXvidmode.a \
-Wl,-Bstatic -lpciaccess -ldrm -lpixman-1 -lXau -lxshmfence -lm -lbz2 -lfontenc -ludev \
-Wl,-Bdynamic -lXdmcp -lXfont2 -lrt -ldl -lpthread
It produces a binary with the following links:
(sid)root#localhost:/opt/xorg-server-1.20.5/hw/xfree86# ldd Xorg
libcrypto.so.1.1 => /lib/arm-linux-gnueabihf/libcrypto.so.1.1 (0xf6a8b000)
libXdmcp.so.6 => /lib/arm-linux-gnueabihf/libXdmcp.so.6 (0xf6a77000)
libXfont2.so.2 => /lib/arm-linux-gnueabihf/libXfont2.so.2 (0xf6a4b000)
librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0xf6a35000)
libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xf6a22000)
libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xf69fd000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xf6902000)
/lib/ld-linux-armhf.so.3 (0xf6ec7000)
libbsd.so.0 => /lib/arm-linux-gnueabihf/libbsd.so.0 (0xf68df000)
libz.so.1 => /lib/arm-linux-gnueabihf/libz.so.1 (0xf68bc000)
libbz2.so.1.0 => /lib/arm-linux-gnueabihf/libbz2.so.1.0 (0xf68a0000)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xf6837000)
libfontenc.so.1 => /lib/arm-linux-gnueabihf/libfontenc.so.1 (0xf6822000)
libfreetype.so.6 => /lib/arm-linux-gnueabihf/libfreetype.so.6 (0xf67a2000)
libpng16.so.16 => /lib/arm-linux-gnueabihf/libpng16.so.16 (0xf6770000)
As seen on the output, "libz" is dynamically linked. So I thought I would try to force gcc/ld to use the static libz instead. But nothing works. I have tried adding "-lz" to the -Bstatic list and I have also tried with "-l:libz.a", as well as with the full path to the file "/lib/arm-linux-gnueabihf/libz.a". Nothing works and the final binary still links to the dymanic .so library. gcc does not give me any errors, it simply seem to ignore my request of statically linking some libraries.
What am I doing wrong?
Also, when I move the two libraries "-lXdmcp -lXfont2" from the dynamic list to the static list, gcc fails with some errors that looks like the libraries are referencing things that is not included? How would I debug linking problems like that?
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXdmcp.a(Key.o): in function `XdmcpGenerateKey':
(.text+0x2): undefined reference to `arc4random_buf'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftfuncs.o): in function `sfnt_get_ushort':
(.text+0x1a): undefined reference to `FT_Load_Sfnt_Table'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftfuncs.o): in function `FreeTypeFreeFace.part.3':
(.text+0x412): undefined reference to `FT_Done_Face'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftfuncs.o): in function `FreeTypeFreeFont':
(.text+0x4aa): undefined reference to `FT_Done_Size'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftfuncs.o): in function `FreeTypeActivateInstance':
(.text+0x686): undefined reference to `FT_Activate_Size'
/usr/bin/ld: (.text+0x6b4): undefined reference to `FT_Set_Transform'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftfuncs.o): in function `FreeTypeLoadFont':
(.text+0x8f8): undefined reference to `FT_Get_Sfnt_Table'
/usr/bin/ld: (.text+0xb6e): undefined reference to `FT_Get_PS_Font_Info'
/usr/bin/ld: (.text+0xc7c): undefined reference to `FT_New_Size'
/usr/bin/ld: (.text+0xcb8): undefined reference to `FT_Set_Char_Size'
/usr/bin/ld: (.text+0xcc6): undefined reference to `FT_Done_Size'
/usr/bin/ld: (.text+0xe70): undefined reference to `FT_Set_Pixel_Sizes'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftfuncs.o): in function `FT_Do_SBit_Metrics.isra.6':
(.text+0xf9c): undefined reference to `FT_Set_Pixel_Sizes'
/usr/bin/ld: (.text+0xfaa): undefined reference to `FT_Load_Glyph'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftfuncs.o): in function `ft_get_very_lazy_bbox':
(.text+0x10a4): undefined reference to `FT_Load_Sfnt_Table'
/usr/bin/ld: (.text+0x10d8): undefined reference to `FT_MulFix'
/usr/bin/ld: (.text+0x10e8): undefined reference to `FT_MulFix'
/usr/bin/ld: (.text+0x10f2): undefined reference to `FT_MulFix'
/usr/bin/ld: (.text+0x10fc): undefined reference to `FT_MulFix'
/usr/bin/ld: (.text+0x116a): undefined reference to `FT_Vector_Transform'
/usr/bin/ld: (.text+0x1172): undefined reference to `FT_Vector_Transform'
/usr/bin/ld: (.text+0x117a): undefined reference to `FT_Vector_Transform'
/usr/bin/ld: (.text+0x1182): undefined reference to `FT_Vector_Transform'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftfuncs.o): in function `FreeTypeRasteriseGlyph':
(.text+0x1530): undefined reference to `FT_Outline_Get_BBox'
/usr/bin/ld: (.text+0x1704): undefined reference to `FT_Outline_Get_BBox'
/usr/bin/ld: (.text+0x17d0): undefined reference to `FT_Load_Glyph'
/usr/bin/ld: (.text+0x1810): undefined reference to `FT_Outline_Get_BBox'
/usr/bin/ld: (.text+0x1c56): undefined reference to `FT_Load_Glyph'
/usr/bin/ld: (.text+0x1d0e): undefined reference to `FT_Render_Glyph'
/usr/bin/ld: (.text+0x1dd0): undefined reference to `FT_Outline_Get_BBox'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftfuncs.o): in function `FreeTypeLoadXFont':
(.text+0x3042): undefined reference to `FT_New_Face'
/usr/bin/ld: (.text+0x3088): undefined reference to `FT_Init_FreeType'
/usr/bin/ld: (.text+0x33f6): undefined reference to `FT_Get_Sfnt_Table'
/usr/bin/ld: (.text+0x3af0): undefined reference to `FT_Get_Sfnt_Table'
/usr/bin/ld: (.text+0x3afc): undefined reference to `FT_Get_Sfnt_Table'
/usr/bin/ld: (.text+0x3b08): undefined reference to `FT_Get_PS_Font_Info'
/usr/bin/ld: (.text+0x3e8a): undefined reference to `FT_Get_Postscript_Name'
/usr/bin/ld: (.text+0x3f04): undefined reference to `FT_Get_X11_Font_Format'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(fttools.o): in function `FTGetName':
(.text+0x22): undefined reference to `FT_Get_Sfnt_Name_Count'
/usr/bin/ld: (.text+0x40): undefined reference to `FT_Get_Sfnt_Name'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(gunzip.o): in function `BufZipFileClose':
(.text+0x48): undefined reference to `inflateEnd'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(gunzip.o): in function `BufZipFileFill':
(.text+0xcc): undefined reference to `inflate'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(gunzip.o): in function `BufFilePushZIP':
(.text+0x1cc): undefined reference to `inflateInit2_'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(bunzip2.o): in function `BufBzip2FileClose':
(.text+0x48): undefined reference to `BZ2_bzDecompressEnd'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(bunzip2.o): in function `BufBzip2FileFill':
(.text+0xce): undefined reference to `BZ2_bzDecompress'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(bunzip2.o): in function `BufFilePushBZIP2':
(.text+0x1c2): undefined reference to `BZ2_bzDecompressInit'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftenc.o): in function `FTPickMapping':
(.text+0x20): undefined reference to `FontEncFromXLFD'
/usr/bin/ld: (.text+0x68): undefined reference to `FT_Get_BDF_Charset_ID'
/usr/bin/ld: (.text+0xd0): undefined reference to `FT_Get_BDF_Charset_ID'
/usr/bin/ld: (.text+0xe2): undefined reference to `FT_Select_Charmap'
/usr/bin/ld: (.text+0xf4): undefined reference to `FontEncFind'
/usr/bin/ld: (.text+0x10a): undefined reference to `FontEncFind'
/usr/bin/ld: (.text+0x118): undefined reference to `FT_Has_PS_Glyph_Names'
/usr/bin/ld: (.text+0x18c): undefined reference to `FT_Get_BDF_Charset_ID'
/usr/bin/ld: (.text+0x19c): undefined reference to `FontEncFind'
/usr/bin/ld: (.text+0x242): undefined reference to `FontEncFind'
/usr/bin/ld: (.text+0x282): undefined reference to `FT_Get_Sfnt_Table'
/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/9/../../../arm-linux-gnueabihf/libXfont2.a(ftenc.o): in function `FTRemap':
(.text+0x2d6): undefined reference to `FontEncName'
/usr/bin/ld: (.text+0x2ea): undefined reference to `FontEncRecode'
/usr/bin/ld: (.text+0x2f6): undefined reference to `FT_Set_Charmap'
/usr/bin/ld: (.text+0x316): undefined reference to `FT_Set_Charmap'
/usr/bin/ld: (.text+0x2e6): undefined reference to `FT_Get_Name_Index'
/usr/bin/ld: (.text+0x304): undefined reference to `FT_Get_Char_Index'
/usr/bin/ld: (.text+0x326): undefined reference to `FT_Get_Char_Index'
collect2: error: ld returned 1 exit status
Short Answer: If you opt for static libraries (assuming that there are ".a" available), the order of the libraries matter - on the command line matter !
Long Answer:
If you have two libraries (A, B) linked with the main (M) code, where there are calls M->A, and A->B, you have to specify the libraries in that order: M, A, B. Recall that when a static library is referenced, the linker will attempt to look for any unresolved reference (function, variable, method, ...) in the named library, and extract the only the '.o' files that resolve those references from the '.a' into the executable.
If the libraries are specified as M, B, A, the linker will look into library 'B' and will not identify any '.o' to be included (since there is only reference M->A). It will then retrieve the '.o' from the A library to satisfy the call M->A, and report error on the newly discovered calls A->B.
When using shared-objects, the whole '.so' is linked (by reference), and all globally defined symbols in the '.so' will be available to any module in the executable, including modules linked from other .so. Therefore, the order of specifying '.so' will usually not matter
it simply seem to ignore my request of statically linking some
libraries.
Unlikely per se.
What am I doing wrong?
You are misunderstanding the nature of dynamic linking. At least these factors are in play:
The shared objects you are linking in may have their own dependencies on other dynamic objects.
Depending on platform and implementation details, the link may well succeed even though some of the dynamic objects' own dependencies are not resolved by anything named on the command line.
The static libraries you are linking very likely do not provide viable resolutions for anything in any of the dynamic libraries.
The overall dynamic dependencies of a program, such as are presented by ldd, is the transitive closure of the dependencies of all shared objects involved. They are not necessarily all referenced directly by the SO that contains the program entry point, and they could even change over time if shared library implementations are swapped out.
Bottom line: it is very likely that at least some of your unexpected dynamic dependencies are coming from the shared objects you are linking, probably libXdmcp and libXfont2. The static libraries are linked, and they will be used to resolve symbols in the main program and in static libraries preceding them on the command line, but they cannot satisfy the shared objects' references to dynamic symbols, no matter where anything appears on the command line.
Also, when I move the two libraries "-lXdmcp -lXfont2" from the
dynamic list to the static list, gcc fails with some errors that looks
like the libraries are referencing things that is not included? How
would I debug linking problems like that?
Static libraries need to be ordered correctly on the link command line. Each one must precede the (static) libraries containing symbols they need, so these particular ones probably need to appear near the front. If necessary, you may repeat libraries on the command line, which is useful if you have circular dependencies, or can serve as a quick hack if you're having trouble finding a viable order otherwise.
You would debug by figuring out with library does provide the symbols the linker complains about, and which library references each. This tells you about the necessary command-line ordering.

arm gcc linker undefined reference

I am working with this code i found on github.
In order to use the uspi library,the help documentation(USING SECTION) said that i should create a makefile and specify the includes and libraries files there.
Because i am new to makefile concept,i first try to manually do that by typing:
arm-linux-gnueabihf-gcc -O0 -DRPI2 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -mtune=cortex-a7 -std=c99 -I./uspi/env/include -I./uspi/include -L./uspi/lib -luspi w.o -o kernel.elf
this errors comes up:
w.o: In function `main':
w.c:(.text+0xc): undefined reference to `USPiEnvInitialize'
w.c:(.text+0x24): undefined reference to `USPiInitialize'
w.c:(.text+0x48): undefined reference to `LogWrite'
w.c:(.text+0x4c): undefined reference to `USPiEnvClose'
w.c:(.text+0x58): undefined reference to `USPiMassStorageDeviceAvailable'
w.c:(.text+0x80): undefined reference to `LogWrite'
w.c:(.text+0x84): undefined reference to `USPiEnvClose'
w.c:(.text+0xb8): undefined reference to `USPiMassStorageDeviceRead'
w.c:(.text+0xdc): undefined reference to `LogWrite'
w.c:(.text+0x108): undefined reference to `LogWrite'
w.c:(.text+0x124): undefined reference to `LogWrite'
w.c:(.text+0x13c): undefined reference to `LogWrite'
w.c:(.text+0x204): undefined reference to `LogWrite'
w.c:(.text+0x23c): undefined reference to `USPiEnvClose'
collect2: error: ld returned 1 exit status
i need the .elf file so i can generate a .img file from it
This link order:
arm-linux-gnueabihf-gcc ... -luspi w.o -o kernel.elf
is incorrect. Libraries should follow the objects they are referenced from:
arm-linux-gnueabihf-gcc ... w.o -luspi -o kernel.elf
Explanation.

gcc undefined reference to gd functions

I'm trying to compile a program, but I get the following error when I run make install.
gcc -fPIC -O3 -g -O2 -o treeviewer -L/usr/include -lm -lpng -ljpeg -lgd treeviewer.o tree.o fileio.o tree.o:
In function `drawImage':
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:587: undefined reference to `gdFontMediumBold'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:587: undefined reference to `gdImageString'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:602: undefined reference to `gdImageLine'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:610: undefined reference to `gdImageLine'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:620: undefined reference to `gdImageFilledRectangle'
tree.o: In function `TreeToImage':
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:477: undefined reference to `gdFontMediumBold'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:526: undefined reference to `gdImageCreate'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:527: undefined reference to `gdImageColorAllocate'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:528: undefined reference to `gdImageColorAllocate'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:529: undefined reference to `gdImageColorAllocate'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:530: undefined reference to `gdImageColorAllocate'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:531: undefined reference to `gdImageColorAllocate'
tree.o:/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:532: more undefined references to `gdImageColorAllocate' follow
tree.o: In function `TreeToImage':
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:548: undefined reference to `gdImagePng'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:552: undefined reference to `gdImageDestroy'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:543: undefined reference to `gdImageJpeg'
tree.o: In function `printTreeInfo':
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:642: undefined reference to `gdFontMediumBold'
tree.o: In function `drawImage':
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:627: undefined reference to `gdImageRectangle'
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:624: undefined reference to `gdImageFilledRectangle'
collect2: error: ld returned 1 exit status
make: *** [treeviewer] Error 1
I have installed the libgd using the commmand sudo apt-get -y install libgd2-xpm-dev build-essential. The folder /usr/include has the file gd.h. Could anyone tell me what am I missing? Thanks in advance.
You might need to list the directory where libgd.a is located with -L if it's not in the default directory list for gcc.
Solved it by changing
gcc -fPIC -O3 -g -O2 -o treeviewer -L/usr/include -lm -lpng -ljpeg -lgd treeviewer.o tree.o fileio.o tree.o
to
gcc -fPIC -O3 -g -O2 treeviewer.o tree.o fileio.o tree.o -L/usr/include -lm -lpng -ljpeg -lgd -o treeviewer

why "undefined reference to `boost::system::generic_category" even if I do link against boost_system

I would understand this error message if I had not put the -lboost_system flag, but it is really here:
g++ -o build/myproject build/main/main.o -L/usr/local/boost/boost_1_52_0/boost/libs -L/usr/lib -Lbuild -L. -lboost_system -lboost_thread -lpthread -lboost_regex -lpq -lmylibrary
build/libmylibrary.a(library.o): In function `__static_initialization_and_destruction_0(int, int)':
library.cpp:(.text+0x25f): undefined reference to `boost::system::generic_category()'
library.cpp:(.text+0x269): undefined reference to `boost::system::generic_category()'
library.cpp:(.text+0x273): undefined reference to `boost::system::system_category()'
Do you have any idea what should I investigate to solve the problem ? (I use gcc 4.6.3)
The order at which you link your libraries matters, in your case you have library.cpp that apparently uses the boost_system library
library.cpp:(.text+0x25f): undefined reference to `boost::system::generic_category()'
library.cpp:(.text+0x269): undefined reference to `boost::system::generic_category()'
library.cpp:(.text+0x273): undefined reference to `boost::system::system_category()'
To solve this you should move the boost_system library to the end of your link line
g++ -o build/myproject build/main/main.o -L/usr/local/boost/boost_1_52_0/boost/libs -L/usr/lib -Lbuild -L. -lboost_thread -lpthread -lboost_regex -lpq -lmylibrary **-lboost_system**
Alternatively, build libmylibrary.so as a shared library and link to the boost_system library directly.

Resources