1 |
> |
2 |
> It's "sometimes", because I am in the DLL hell again. DLLs changing |
3 |
> addresses each run and Cygwins rebaseall script doesn't fix it this |
4 |
> time. |
5 |
> |
6 |
|
7 |
Again something for the archives and those who are interested: |
8 |
|
9 |
The reason why rebaseall didn't fix it is, that it only rebases files |
10 |
that have been installed with setup.exe. It makes use of files in |
11 |
which the pathes of DLLs are listet. By creating such a list file it |
12 |
is possible to rebase user contributed DLLs. The file is given with |
13 |
the -T option of rebaseall. |
14 |
|
15 |
SOLVED: |
16 |
|
17 |
Open a windows command shell (cmd): |
18 |
|
19 |
P:/cygwin/bin/ash |
20 |
/bin/rebaseall -T /home/prefix/rebase.lst |
21 |
exit |
22 |
exit |
23 |
|
24 |
I create the rebase.lst with this lines: |
25 |
|
26 |
#/bin/bash |
27 |
BASE=/home/prefix |
28 |
rm $BASE/rebase.lst |
29 |
find $BASE/gentoo/bin/ -name *.dll -o -name *.so >> $BASE/rebase.lst |
30 |
find $BASE/gentoo/lib/ -name *.dll -o -name *.so >> $BASE/rebase.lst |
31 |
find $BASE/gentoo/usr/bin -name *.dll -o -name *.so >> $BASE/rebase.lst |
32 |
find $BASE/gentoo/usr/lib -name *.dll -o -name *.so >> $BASE/rebase.lst |
33 |
|
34 |
Maybe some more is required if DLLs are outside of this pathes. It is |
35 |
necessary that all DLLs have write access to change the default |
36 |
address where they are loaded to. |
37 |
|
38 |
TODO: |
39 |
|
40 |
A remaining problem is, that you can't run this script from within |
41 |
bash, which depends on many DLLs itself. Hence you have to run it from |
42 |
a very limited ash. This means, you can't include the rebaseall script |
43 |
into emerge, if you wan't be able to run emerge from bash. |
44 |
|
45 |
I need to adapt the rebase all script so that it only rebases those |
46 |
DLLs that are not loaded by bash. It must load them to a completly |
47 |
different address space. That would base DLLs from Perl and Python for |
48 |
example. |
49 |
|
50 |
Remains the issue with the ncurses DLL wich has a bad (low) default |
51 |
address, but bash depends on it. The best solution is probably to set |
52 |
it explicitly to a sane address. |
53 |
|
54 |
Al |