[comp.unix.sysv386] problems linking large files

brunner@metoch.uu.ch (felix brunner) (03/05/91)

I have some problems with ld (linker of C++, C resp.)!
I am using Interactive Unix 2.2 and Glockenspiel C++ 2.0B.

ld displays the following error message:
	fail to write symbol name 'symbol_name' in string table
	for file 'file_name'

Does anybody now what's the reason of this error message ?
How can I  avoid it ?
Where can I find information about ld's error messages ?  
(I couldn't find any information about ld's error messages neither
in C manuals nor in UNIX manuals.)

I expect my string table to have a length of less than 200'000 bytes.
According to my UNIX manuals the maximum length of a string table
is 2^32 - 4 bytes. I also made a test program with a string table length of
more than 400'000 bytes, the length of the string table entries are 40 bytes.
I had no problems to build the executable file of this test program, and
I'm sure that the program that fails to link will have a smaller
string table than the test program.                                     

 
 
Urs Wuest
Mettler-Toledo AG
Switzerland 
E-Mail: wuest@metoch.ch
Phone:	(0)1 944 30 83
                                                                 

nvk@ddsw1.MCS.COM (Norman Kohn) (03/14/91)

In article <815@metoch.uu.ch> brunner@metoch.uu.ch (felix brunner) writes:
>I have some problems with ld (linker of C++, C resp.)!
>I am using Interactive Unix 2.2 and Glockenspiel C++ 2.0B.
>
>ld displays the following error message:
>	fail to write symbol name 'symbol_name' in string table
>	for file 'file_name'


I have encountered this with two versions of ld (ISC and UPORT)
on a large software package.  I concluded that the problem was
the number of externs in my software:  I successfully corrected
it by taking large numbers of related storage and combining
them into structs... i.e.,
	int a,b;
became
	struct {int a,b;}foo;
so that references became foo.a and foo.b.
Now a and b are defined offsets and the only extern is foo.

I readily acknowledge that this should not help:  a properly written
linker should size its tables and files dynamically, and such large
packages as emacs and gcc compile and link without trouble.
I have not compared symbol table sizes.  But the fix works,
and I've left well enough alone.

-- 
Norman Kohn   		| ...ddsw1!nvk
Chicago, Il.		| days/ans svc: (312) 650-6840
			| eves: (312) 373-0564

cpcahil@virtech.uucp (Conor P. Cahill) (03/15/91)

>I have encountered this with two versions of ld (ISC and UPORT)
>on a large software package.  I concluded that the problem was
>the number of externs in my software:  I successfully corrected
>
>a properly written linker should size its tables and files
>dynamically, and such large

and a properly written program won't use much in the way of
global variables :-}

-- 
Conor P. Cahill            (703)430-9247        Virtual Technologies, Inc.
uunet!virtech!cpcahil                           46030 Manekin Plaza, Suite 160
                                                Sterling, VA 22170 

martin@saturn.uucp (Martin J. Schedlbauer) (03/17/91)

In article <1991Mar14.140433.4397@ddsw1.MCS.COM> nvk@ddsw1.MCS.COM (Norman Kohn) writes:
>In article <815@metoch.uu.ch> brunner@metoch.uu.ch (felix brunner) writes:
>>I have some problems with ld (linker of C++, C resp.)!
>>
>>ld displays the following error message:
>>	fail to write symbol name 'symbol_name' in string table
>>	for file 'file_name'
>
>
You are running out of disk space. I received a similar message once under
Esix and a dfspace revealed that I had only 9 MB left. Cleaning out the
file system increased the disk space and ld hummed along merrily.

	...Martin



-- 
==============================================================================
Martin J. Schedlbauer	| martin@saturn.UUCP	| ...!ulowell!saturn!martin
8 Gilman Road		| mschedlb@ulowell.edu	| ...!uunet!wang!saturn!martin
Billerica, MA 01862 USA	| CIS: 76675, 3364	| /\/\/\/\/\/\/\/\/\/\/\/\/\/\