bug-prolog
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Linking C libraries


From: John Badcock
Subject: Linking C libraries
Date: 26 Apr 2005 09:52:32 +1000

The possible bug relates to the "calling C from prolog" example in
Section 9.1.8 of the manual, edition 1.7.

Type of machine:
Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003
i686 i686 i386 GNU/Linux

GNU Prolog version:
Prolog top-Level (GNU Prolog) 1.2.16

Files are from the example in section 9.1.8 of the manual, p. 187.

examp.pl contains:

:- foreign(first_occurrence(+string,+char,-positive)).

examp_c.c contains:

#include <string.h>
#include "gprolog.h"

Bool
first_occurrence(char *str, long c, long *pos)
{
    char *p;

    p = strchr(str, c);
    if (p == NULL)    /* C does not appear in A */
        return FALSE; /* fail */

    *pos = p - str;   /* set the output argument */
        return TRUE; /* succeed */
}

Compilation as suggested in the manual produces:

address@hidden GProlog]$ gplc examp.pl examp_c.c
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a(atom_c.o)(.text+0x1136): In
function `Lower_Upper_2':
: undefined reference to `__ctype_toupper'
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a(atom_c.o)(.text+0x1177): In
function `Lower_Upper_2':
: undefined reference to `__ctype_tolower'
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a(le_interf_c.o)(.text+0x7b): In
function `Add_Linedit_Completion_1':
: undefined reference to `__ctype_b'
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a(pred_supp.o)(.text+0xc4): In
function `Father_Pred_Of_Aux':
: undefined reference to `__ctype_b'
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a(pred_supp.o)(.text+0x170): In
function `Detect_If_Aux_Name':
: undefined reference to `__ctype_b'
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a(parse_supp.o)(.text+0x4c6): In
function `Parse_Term':
: undefined reference to `__ctype_b'
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a(write_supp.o)(.text+0x50f): In
function `Show_Atom':
: undefined reference to `__ctype_b'
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a(scan_supp.o)(.text+0xa86): more
undefined references to `__ctype_b' follow
/usr/lib/gprolog-1.2.16/lib/liblinedit.a(linedit.o)(.text+0x10f6): In
function `LE_FGets':
: undefined reference to `__ctype_tolower'
/usr/lib/gprolog-1.2.16/lib/liblinedit.a(linedit.o)(.text+0x1225): In
function `LE_FGets':
: undefined reference to `__ctype_toupper'
/usr/lib/gprolog-1.2.16/lib/liblinedit.a(linedit.o)(.text+0x1cee): In
function `LE_Get_Key':
: undefined reference to `__ctype_b'
/usr/lib/gprolog-1.2.16/lib/liblinedit.a(terminal.o)(.text+0x250): In
function `Parse_Env_Var':
: undefined reference to `__ctype_b'
/usr/lib/gprolog-1.2.16/lib/liblinedit.a(terminal.o)(.text+0x602): In
function `LE_Get_Char':
: undefined reference to `__ctype_b'
collect2: ld returned 1 exit status
compilation failed

If the identically-named files and Makefile supplied in ExamplesC are
used instead,

make produces the same undefined references.

The undefined references are similar to those reported by Chris
Nettleton on 17 Mar 2005,

for a “Hello world” program.

Following a suggestion regarding undefined references (Daniel Diaz,
users-prolog, 25 Jan 2001) a -v option was added for linking, using the
following makefile and the short examp files listed earlier.

examp: examp.o examp_c.o
gplc -v examp.o examp_c.o -o examp
examp.o: examp.pl
gplc -c examp.pl
examp_c.o: examp_c.c
gplc -c examp_c.c

This produced the following:

gcc -o examp /usr/lib/gprolog-1.2.16/lib/obj_begin.o examp.o examp_c.o
/usr/lib/gprolog-1.2.16/lib/all_pl_bips.o
/usr/lib/gprolog-1.2.16/lib/all_fd_bips.o
/usr/lib/gprolog-1.2.16/lib/top_level.o
/usr/lib/gprolog-1.2.16/lib/debugger.o
/usr/lib/gprolog-1.2.16/lib/libbips_fd.a
/usr/lib/gprolog-1.2.16/lib/libengine_fd.a
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a
/usr/lib/gprolog-1.2.16/lib/obj_end.o
/usr/lib/gprolog-1.2.16/lib/libengine_pl.a
/usr/lib/gprolog-1.2.16/lib/liblinedit.a -lm
/usr/lib/gprolog-1.2.16/lib/libbips_pl.a(atom_c.o)(.text+0x1136): In
function `Lower_Upper_2':
: undefined reference to `__ctype_toupper'

etc as above.

Thank you in advance for any advice you can offer.
John.

-- 
Dr John Badcock
Director
Persistent Vision Pty Ltd

Tel  +61 3 9548 7448
Fax  +61 3 9548 7447
Email  address@hidden
URL  www.pvision.com.au

Postal address:
P. O. Box 5270
Clayton, Victoria,
Australia 3168





reply via email to

[Prev in Thread] Current Thread [Next in Thread]