[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
"unable to remap" on Windows
From: |
Paul Kienzle |
Subject: |
"unable to remap" on Windows |
Date: |
Tue, 18 Nov 2003 16:29:18 -0500 |
User-agent: |
Mutt/1.2.5.1i |
Hi,
I'm getting the following error on WinXP (octave-forge
version of octave-2.1.50):
>> listen (1515)
...\octave.exe: *** unable to remap ...\fft.oct to same address as parent --
0x1720000
6 [main] octave 980 sync_with_child: child 3236(0x640) died before
initialization with status code 0x1
9764 [main] octave 980 sync_with_child: *** child state child loading dlls
fork : No children
The following comment from the dllhelpers page seems relevant
http://www.neuro.gatech.edu/users/cwilson/cygutils/dll-stuff/README
Removed the '-Wl,--enable-auto-image-base' option. This sometimes
causes problems with the heap-replication-in-child function of
cygwin1.dll; cygwin expects that cygwin1.dll will be at the same
address in both parent and child. With auto-image-base, it is
possible that the auto-generated base address will conflict with
the cygwin1.dll, and the loader will either relocate your DLL or
the cygwin1.dll in the child's address space. Often, it will choose
to relocate cygwin1.dll === then things go boom.
Therefore, you should choose:
1) just let ld use the default base address of 0x10000000 for
your DLLs. This means that all of your DLL's will conflict
with each other, and the windows runtime loader will have to
relocate them. However, this operation is relatively
inexpensive on windows, and I don't *think* the windows
runtime loader will EVER "bump" a DLL with a different desired
base address, when trying to load other DLLs that share
a common desired base address. That is:
cygwin1.dll : desired BA = 0x61000000
my_dll1.dll : desired BA = 0x10000000
my_dll2.dll : desired BA = 0x10000000
So, my_dll1 and/or my_dll2 will have to be relocated. But,
I posit that the windows loader will NOT choose an address
that conflicts with the range desired by cygwin1.dll -- because
cygwin1.dll has a different desired BA than (my_dll1 & my_dll2).
This is the option I chose to use.
2) Explicitly specify a base address for every DLL you build:
-Wl,--base-address=0xXXXXXXXX. Be careful!
Date: 2001-09-19, gcc 2.95.3
Maybe we should remove the --enable-auto-image-base from
our own builds. Anyone with cygwin experience care to
comment?
Paul Kienzle
address@hidden
- "unable to remap" on Windows,
Paul Kienzle <=