mkshlib on SCO Unix 3.2, "#objects noload" not working?

Roger West west at
Thu Jun 14 03:26:12 AEST 1990

I have run into a problem trying to build shared libraries on SCO Unix
3.2.  The "#objects noload" directive in the library specification file
does not seem to be working correctly.  The following source gives an
example.  I am trying to build a simple shared library libf_s containing
a single function funct().  This function calls printf() from the
standard c shared library /shlib/libc_s...


    CFLAGS = -g # -DIMPORT

    a.out: main.o libf_s.a
    	$(CC) -o $@ main.o -L. -lf_s -lc_s

    libf_s.a: funct.o 
    	rm -f libf_s.a libf_s
    	mkshlib -s -t libf_s -h libf_s.a

    #target     libf_s
    #address    .text   0x80600000
    #address    .data   0x80a00000
        funct   1
    #objects noload
    #init funct.o
        _libf__iob      _iob
        _libf_printf    printf


    #if !defined(import_h) && defined(IMPORT) 
    #define import_h

    #define printf  (* _libf_printf )
    #define _iob    (* _libf__iob )



    #include "import.h"
    #include <stdio.h>

    #ifdef IMPORT
    int  printf(const char *format, ...) = 0;
    FILE _iob[_NFILE]                    = 0;

    void funct( msg )
    char*   msg;
        printf( "%s\n", msg );


    #include "import.h"
    #include <stdio.h>

    extern void funct();

    char string[] = "Don't call me DUDE!";

    int main() { 
        int i, k; 
        for( i=0; i<200; ++i ) {
            for( k=0; k<i%(80 - sizeof(string)); ++k )
                putchar(' ');


With the cpp symbol IMPORT defined, libf_s.a, libf_s, and a.out all
build fine and work correctly.  Instead of importing printf and _iob,
however, I should be able to count on the "#objects noload" directive
in to resolve them at the time libf_s is built (by searching
-lc_s).  If I am correct, this should be what happens when -DIMPORT in
the Makefile is commented out (as shown).  Instead, mkshlib prints the
following error message...

    mkshlib: fatal error: Found printf in p$, but it's not a usable symbol
    *** Error code 1

The fact that this error message doesn't print out a legible filename
is another indication that mkshlib may be not working correctly.  Is
it broken, or is there something I am missing?

    |   Roger West              Texas Instruments          |
    |   west at         P.O. Box 149149, m/s 2201  |
    |___512-250-7372____________Austin, TX 78714-9149______|

More information about the Comp.unix.i386 mailing list