This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: gcc static library issue -- libdl


Hello,

On Wed, Oct 31, 2001 at 07:28:26PM -0800, Bin Zhou so wrote:

> I am using gcc2.95.2 on Solaris2.8 on Intelx86.

> I use the option "-static" at the linkage phase, in order to link to
> gcc libraries staticly (get rid of dynamic libraries such as
> libstdc++.so at running time). 

[...]

> Since my source code references to system functions such as
> "dlclose" and "dlsym" etc, so the "libdl" is required for static
> linkage. Therefore, I also added "-ldl" for linkage. The problem is
> that the linker reports an error saying that "can not find -ldl".

Sun does not ship with a statically linked libdl and does not usually
want people to ship statically linked programs. There are many
reasons to this and primarily they are be summed up here:

http://marc.theaimsgroup.com/?l=openssh-unix-dev&m=98563522332517&w=2

> I checked /usr/lib and /usr/local/lib, I can only see
> libdl.so/libdl.so.1, but could not find libdl.a

There is none.

> However, Redhat have both the libdl.a and libdl.so.

Of course.

> Where can I get the libdl.a for Solaris2.8 on Intelx86 or there is
> an altnative library I can link to.

You have two alternatives:

1) Get the Solaris 2.8 source code and compile it. However due to
strict licensing restrictions, this will not apply when we ship the
product.

2) ^BETTER^ alternative.

See attached dlstubs.c file (derived from /usr/include/dlfcn.h and
thanks to Hal <hal@deer-run.com>). 

Compile the attached file with gcc such as:

gcc -c 02 -g dlstubs.o dlstubs.c

Then use this object file with your target and compile it with static
flag. For example,

    gcc -static -o bar foo.o dlstubs.o -l{yourlibs}

> Thanks a lot for any comments,

Hope that helps.

Regards

-- 
Kevin Sindhu 			    <kevin at tgivan dot com> 
Systems Engineer
TGI Technologies Inc.
107 E 3rd Avenue        	Tel: (604) 872-6676 Ext 321
British Columbia V5T 1C7	Fax: (604) 872-6601 
Canada.
#include <sys/types.h>
#include <dlfcn.h>

	/* dl*() stub routines for static compilation.  Prepared from
	   /usr/include/dlfcn.h by Hal Pomeranz <hal@deer-run.com> */

	void *dlopen(const char *str, int x) {}
	void *dlsym(void *ptr, const char *str) {}
	int dlclose(void *ptr) {}
	char *dlerror() {}
	void *dlmopen(Lmid_t a, const char *str, int x) {}
	int dladdr(void *ptr1, Dl_info *ptr2) {}
	int dldump(const char *str1, const char *str2, int x) {}
	int dlinfo(void *ptr1, int x, void *ptr2) {}

	void *_dlopen(const char *str, int x) {}
	void *_dlsym(void *ptr, const char *str) {}
	int _dlclose(void *ptr) {}
	char *_dlerror() {}
	void *_dlmopen(Lmid_t a, const char *str, int x) {}
	int _dladdr(void *ptr1, Dl_info *ptr2) {}
	int _dldump(const char *str1, const char *str2, int x) {}
	int _dlinfo(void *ptr1, int x, void *ptr2) {}


------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]