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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

LoadLibrary may fail if DLL is built with gcc -shared


I am trying to build a DLL. The file testdll.c is:

#include <stdlib.h>

void not_exported(void){
	printf("not_exported\n");
}

void b(void){
	printf("Called b\n");
	not_exported();
}

void a(void){
	printf("Called a\n");
}

and the testdll.def file is

LIBRARY     testdll

EXPORTS
    ; Explicit exports can go here
	b          @1
	a          @2

First, I build it with the command

dllwrap --dllname=testdll.dll --def=testdll.def testdll.c

Then I build the test program test-explicit.c

#include <windows.h>

int main(){
	HINSTANCE handle;
	FARPROC f;

	handle=LoadLibrary("testdll.dll");
	if (handle==0){
		printf("handle=0\n");
		exit(1);
	}

	f=GetProcAddress(handle,"b");
	if (f==0){
		printf("b=0\n");
		exit(1);
	}

	f=GetProcAddress(handle,"a");
	if (f==0){
		printf("a=0\n");
		exit(1);
	}

	exit(0);
}

with the command

gcc -o test-explicit.exe text-explicit.c

and run test-explicit.exe. No output, as expected.

But, if the DLL is built with the command

gcc -shared -o testdll.dll testdll.c testdll.def

and test-explicit.exe is run, the output is

a=0

.

It seems thet the DLL created by gcc -shared is broken... Implicit linking
works in both cases.

Included are outputs of objdump -p : it seems that the only relevant difference
is that, in the DLL created by dllwrap, exported symbols are in alphabetical
order, while in the DLL created by gcc -shared, they are in numerical order.
In fact, if the function "a" is renamed to "c", everything works.

I am using Cygwin environment with gcc 3.2 20020927 and ld 2.13.90 20030308.

Bye
Fabrizio




__________________________________________________________________
Tiscali ADSL, fino a 9 MESI GRATIS sull'offerta Tiscali ADSL Light Mega!
Tiscali ADSL non teme confronti! Abbonati subito.
http://point.tiscali.it/adsl/index.shtml



Attachment: created_with_dllwrap.txt
Description: Text document

Attachment: created_with_gcc_-shared.txt
Description: Text document


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