Ticket #2283 (new bug)

Opened 4 years ago

Last modified 3 years ago

WIndows: loading objects that refer to DLL symbols

Reported by: simonmar Owned by:
Priority: normal Milestone: _|_
Component: GHCi Version: 6.8.2
Keywords: Cc:
Operating System: Windows Architecture: x86
Type of failure: Difficulty: Unknown
Test Case: Blocked By:
Blocking: Related Tickets:

Description

This is a test case from #1288, distilled into a separate report so I can close #1288:

test3b.c:

#include <stdio.h>

__declspec(dllexport) void _stdcall test(int arg)
{
   printf("The argument passed was %i\n", arg );
}

test_proxy_5a.c:

__declspec(dllimport) void _stdcall test(int arg);

void test_proxy(int arg)
{
   test(arg);
}

To reproduce:

gcc -c test3b.c
ar -rv test3b.a test3b.o 
c:/mingw/bin/dllwrap --export-all-symbols --output-lib test3b.dll.a -o test3b.dll test3b.a
gcc -c test_proxy_5a.c
ghci -ltest3b test_proxy_5a.o

the error message we get:

GHCi, version 6.9.20080512: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Loading object (static) test_proxy_5a.o ... done
Loading object (dynamic) test3b ... done
ghc.exe:
test_proxy_5a.o: unknown symbol `__imp__test'
final link ... ghc.exe: linking extra libraries/objects failed

I'm not sure to what extent we need to support this, it's possible to link to the DLL by omitting the dllimport declaration.

Change History

Changed 3 years ago by batterseapower

Surely ghci can't be expected to handle this? On Windows, the user must also link against the DLL import lib (test3b.dll.a) if they want test_proxy_5a to work properly, whether they are building an EXE or running GHCi.

Note: See TracTickets for help on using tickets.