> URL: > <http://savannah.gnu.org/support/?107959> > *snip* > Details: > > This is a follow-up from > http://sourceware.org/bugzilla/show_bug.cgi?id=13710 > > In the latest binutils snapshots, a change was applied which makes the > processing of .def files for the win32/win64 targets more strict. > According to > the MSDN documentation at > http://msdn.microsoft.com/en-us/library/d91k01sh%28v=vs.80%29.aspx all > .def > files must start with 'LIBRARY mylib.dll' followed by 'EXPORTS'.
Anyone using the MSDN as a reference in subtle matters such as this must bring a fair bit of salt. If you instead look at this http://msdn.microsoft.com/en-us/library/30fw19zw%28v=vs.80%29.aspx it is not needed to have any LIBRARY statement AT ALL. And the MS tools don't need any LIBRARY statement. Breaking stuff arbitrarily in binutils, using a weak MSDN reference as defence, is just crazy. > Let's take this simple .def file for example: > > LIBRARY mylib.dll > EXPORTS > my_func > > If this .def file is processed by libtool then it automatically performs this > set of commands: > > libtool: link: if test "x`/bin/sed 1q .libs/libcairo.def`" = xEXPORTS; then > cp .libs/libcairo.def .libs/libcairo-2.dll.def; else echo EXPORTS > > .libs/libcairo-2.dll.def; cat .libs/libcairo.def >> > .libs/libcairo-2.dll.def; > fi > > This set of commands check if the first line of the .def file contains > 'EXPORTS' and if this isn't the case, it automatically adds it. That's not a completely accurate description, libtool is using the EXPORTS header in the list of exported symbols as a key that this is not a raw exports list, but instead a handwritten .def file. So, if libtool doesn't find EXPORTS on the first line it assumes that the file is a raw list of exported symbols, which on windows means that it will have to be modified into a .def file (by adding a line with the EXPORTS header). So, the fix in libtool is fairly straight-forward, but the case for needing the LIBRARY line in the .def file is non-existant if you ask me. > Given the example .def file I mentioned earlier this will end up in: > > EXPORTS > LIBRARY mylib.dll > EXPORTS > my_func > > This obviously is incorrect and can't be processed by binutils. > > Can libtool be changed so that it can process these kind of situations > more properly? Yes, of course it /can/, but IMHO it is binutils that needs to be un-broken. Cheers, Peter _______________________________________________ https://lists.gnu.org/mailman/listinfo/libtool