west@osage.csc.ti.com (Roger West) (06/14/90)
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... -------------------------Makefile------------------------------------ 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 libf.sl -t libf_s -h libf_s.a -------------------------libf.sl------------------------------------- #target libf_s #address .text 0x80600000 #address .data 0x80a00000 #branch funct 1 #objects funct.o #objects noload -lc_s #init funct.o _libf__iob _iob _libf_printf printf -------------------------import.h------------------------------------ #if !defined(import_h) && defined(IMPORT) #define import_h #define printf (* _libf_printf ) #define _iob (* _libf__iob ) #endif -------------------------funct.c------------------------------------- #include "import.h" #include <stdio.h> #ifdef IMPORT int printf(const char *format, ...) = 0; FILE _iob[_NFILE] = 0; #endif void funct( msg ) char* msg; { printf( "%s\n", msg ); } -------------------------main.c-------------------------------------- #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(' '); funct(string); } } --------------------------------------------------------------------- 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 libf.sl 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@itg.ti.com P.O. Box 149149, m/s 2201 | |___512-250-7372____________Austin, TX 78714-9149______|