From: Eli Z. <el...@gn...> - 2012-03-03 17:04:28
|
> Date: Sun, 04 Mar 2012 00:32:25 +1100 > From: djd <dj...@cm...> > CC: min...@li... > > With the -static switch: > objdump -s -x convert.exe | fgrep -i "dll name:" > DLL Name: ADVAPI32.DLL > DLL Name: KERNEL32.dll > DLL Name: msvcrt.dll > DLL Name: msvcrt.dll > DLL Name: libgnurx-0.dll So you have one more linker switch to add: -lregex. And I don't see how you could get an error regarding libintl-8.dll, when this executable clearly does not depend on it, and neither does libgnurx-0.dll. |
From: djd <dj...@cm...> - 2012-03-04 04:20:26
|
On 4/03/2012 4:04 AM, Eli Zaretskii wrote: >> Date: Sun, 04 Mar 2012 00:32:25 +1100 >> From: djd<dj...@cm...> >> CC:min...@li... >> >> With the -static switch: >> objdump -s -x convert.exe | fgrep -i "dll name:" >> DLL Name: ADVAPI32.DLL >> DLL Name: KERNEL32.dll >> DLL Name: msvcrt.dll >> DLL Name: msvcrt.dll >> DLL Name: libgnurx-0.dll > So you have one more linker switch to add: -lregex. That switch has been there all along. From a previous post; > did you make sure they are specified in this order, i.e. first -lintl, > then -liconv? Copied from the command line: ... -lintl -lregex -liconv -o ... > And I don't see how you could get an error regarding libintl-8.dll, > when this executable clearly does not depend on it, and neither does > libgnurx-0.dll. > Yes, you mentioned that if the -static switch is used, then no non-windows dll would be included, so I was surprised to find: a) If the mingw distribution was `disabled' and then the application run, it `aborted' with a message that libintl-8.dll is missing - when it should not be there and was not found by objdump. I had been using some object files in the compile line, so I started from `scratch' with all *.c files and recompiled with -static. No -Wall warnings were issued and: b) As previously, objdump reveals a non-windows dll, libgnurx-0.dll even though the switch -lregex is and always has been, after all *.c files on the compile command line. With the mingw distribution intact, the application runs OK With the mingw distribution disabled, the application aborts with the message ...libgnurx-0.dll not found. (For an unknown reason, except a fresh compile form all *.c files, this time it was not libintl-8.dll that was reported as missing) The is consistent with objdump reporting the presence of libgnurx-0.dll and the application aborting when libgnurx-0.dll is disabled, but apparently inconsistent with compiling with the -static switch. Regards > > |
From: Eli Z. <el...@gn...> - 2012-03-04 16:34:30
|
> Date: Sun, 04 Mar 2012 15:20:08 +1100 > From: djd <dj...@cm...> > CC: min...@li... > > > So you have one more linker switch to add: -lregex. > > That switch has been there all along. From a previous post; > > > did you make sure they are specified in this order, i.e. first -lintl, > > then -liconv? > > Copied from the command line: ... -lintl -lregex -liconv -o ... Do you have a file named libregex.a in your MinGW lib/ subdirectory? I'm guessing you don't. I think you have there only libregex.dll.a or some such, which is an import library that instructs the executable to load libgnurx-0.dll at run time. IOW, without libregex.a, you cannot do a completely static build. If my guess is correct, you need to download and install mingw-libgnurx-X.Y.Z-dev package from the MinGW site. If my guess is incorrect, then please add -v to the link command line, and post here everything that the compiler prints while linking with the -static switch. |
From: Sergio N. <sfh...@ho...> - 2012-03-05 07:32:35
|
> Well, you already know the answer to that, since you were in exactly > this position, and saw what happens ;-) > > > Your guess was incorrect, but clouded by the issue that libregex.a is > > just a copy of libgnurx.dll.a. > > Do you still want the -v output? > > No. I guess you'll need to get the sources of that mingw-libgnurx > package and build the static library yourself, to solve this. Ciao. We seem to be going around in circles here. Is it possible to have access to this app source code so I can have a go at it? Cheers. |
From: djd <dj...@cm...> - 2012-03-05 09:52:02
|
On 5/03/2012 6:32 PM, Sergio NNX wrote: > > Well, you already know the answer to that, since you were in exactly > > this position, and saw what happens ;-) > > > > > Your guess was incorrect, but clouded by the issue that libregex.a is > > > just a copy of libgnurx.dll.a. > > > Do you still want the -v output? > > > > No. I guess you'll need to get the sources of that mingw-libgnurx > > package and build the static library yourself, to solve this. > > Ciao. > > We seem to be going around in circles here. Is it possible to have > access to this app source code so I can have a go at it? > > Cheers. > > > Yes, we have gone around a complete circle and I am back to more or less where this part started, the need for a `genuine' static libregex.a - except I did not realise it was not `genuine'. However, I am not complaining, the only c program I have ever compiled previously, maybe 30 years ago, was "Hello word" and I have never used mingw or gcc. I have learnt a lot through this exercise. I have attached two files, the original source uni2ascii.zip (its on the internet somewhere) and my modified version. Originally I tried using the configure script included in uni2ascii.zip, however after much trying, it was just too convoluted (for me) to easily work out what was going on, so I went back to the original *.c files and started again. That meant obtaining some additional source (getline, win32-uname, ...) and headers and I temporarily renamed the output convert.exe to avoid confusing myself. All these *.c files are in convert.zip and most of the extra headers plus the compile line I have been using. But some of the additional headers are in their usual directories and I cannot immediately remember what they were. However if they are not obvious to you, I am sure I can work it out. And thanks to Eli Zaretskii for his knowledge and doggedness in sticking with me when I must have appeared appallingly clueless to him. Regards |
From: Eli Z. <el...@gn...> - 2012-03-05 16:38:43
|
> From: Sergio NNX <sfh...@ho...> > Date: Mon, 5 Mar 2012 07:32:28 +0000 > Cc: min...@li... > > > I guess you'll need to get the sources of that mingw-libgnurx > > package and build the static library yourself, to solve this. > > We seem to be going around in circles here. FWIW, I see no circle here. In fact, this thread just solved the original problem, by concluding that a static regex library is needed to accomplish the OP's goal of having a stand-alone program. All that remains is to get hands on the regex sources and that's it. |
From: djd <dj...@cm...> - 2012-03-05 01:20:32
|
On 5/03/2012 3:34 AM, Eli Zaretskii wrote: >> Date: Sun, 04 Mar 2012 15:20:08 +1100 >> From: djd<dj...@cm...> >> CC: min...@li... >> >>> So you have one more linker switch to add: -lregex. >> That switch has been there all along. From a previous post; >> >>> did you make sure they are specified in this order, i.e. first -lintl, >>> then -liconv? >> Copied from the command line: ... -lintl -lregex -liconv -o ... > Do you have a file named libregex.a in your MinGW lib/ subdirectory? > I'm guessing you don't. I think you have there only libregex.dll.a or > some such, which is an import library that instructs the executable to > load libgnurx-0.dll at run time. IOW, without libregex.a, you cannot > do a completely static build. Yes, there is a libregex.a. However it is `suspicious' as it is exactly the same size as libgnurx.dll.a. I just now tried a binary compare (cmp libregex.a libgnurx.dll.a) - they are identical??? These came in one tar file (mingw-libgnurx-2.5.1-dev.tar.gz) and I think the source was Source Forge.. It would seem someone has merely copied libgnurx.dll.a to libregex.a in order to avoid gcc warnings when the -static switch is used, which is not `nice'. One may have tested, thinking the application was `stand-alone' and distribute it to others who know nothing about mingw. But, what was thought to work, no longer works for those others. A pertinent point. Will a warning be issued if the -static switch is set and a relevant *.a is missing, however the run-time version is present? > If my guess is correct, you need to download and install > mingw-libgnurx-X.Y.Z-dev package from the MinGW site. I assume by `MinGW site, you mean `Source Forge' which is where I am fairy sure I obtained the regex libraries. Nevertheless, I will look for another MinGW site. > If my guess is incorrect, then please add -v to the link command line, > and post here everything that the compiler prints while linking with > the -static switch. > > Your guess was incorrect, but clouded by the issue that libregex.a is just a copy of libgnurx.dll.a. Do you still want the -v output? Regards |
From: Keith M. <kei...@us...> - 2012-03-05 15:58:46
|
On 05/03/12 01:20, djd wrote: > Yes, there is a libregex.a. However it is `suspicious' as it is > exactly the same size as libgnurx.dll.a. I just now tried a binary > compare (cmp libregex.a libgnurx.dll.a) - they are identical??? > > These came in one tar file (mingw-libgnurx-2.5.1-dev.tar.gz) and I > think the source was Source Forge.. It's not one of our officially supported packages, but I guess you've found it amongst our collection of unsupported user-contributed packages. > It would seem someone has merely copied libgnurx.dll.a to libregex.a > in order to avoid gcc warnings when the -static switch is used, which > is not `nice'. Nice or not, it's what the original contributor intended; he says as much, in the README file within the corresponding source package. > One may have tested, thinking the application was `stand-alone' and > distribute it to others who know nothing about mingw. But, what was > thought to work, no longer works for those others. No, that isn't the case at all. As that README makes very clear, the DLL is called libgnurx-0.dll to introduce DLL versioning, while also avoiding potential name collisions with incompatible offerings from the GnuWin32 project; libgnurx.dll.a is the naturally named import library to accompany it, and libregex.a is a COPY of that same import library, to accommodate build scripts or makefiles which link with -lregex. It is perfectly clear that this package was never intended to support static linking. Now, had I been the contributor, I would likely have named the second import library as libregex.dll.a, (which still provides the capability for linking with -lregex), and could then have offered libregex.a as a statically linkable library. However, this package may be a throwback to a time when this duality of naming was not supported; for whatever reason, the original contributor chose to offer only a dynamically linkable library. >> If my guess is correct, you need to download and install >> mingw-libgnurx-X.Y.Z-dev package from the MinGW site. No; that's likely just what you've got already. You need to download the source package, and rebuild as a statically linkable library. FWIW, this all seems like a lot of unnecessary effort, just to avoid packing the EXE and all of it's DLL requisites into a single archive, so they can be installed as a single unit. > I assume by `MinGW site, you mean `Source Forge' which is where I am > fairy[sic] sure I obtained the regex libraries. All official (and user-contributed) MinGW downloads are hosted on the MinGW project pages at SourceForge, so yes, that's what Eli means. > Nevertheless, I will look for another MinGW site. There isn't one, other than MinGW.org, which will refer you back to the SourceForge host, for downloads. -- Regards, Keith. |
From: Eli Z. <el...@gn...> - 2012-03-05 03:55:09
|
> Date: Mon, 05 Mar 2012 12:20:14 +1100 > From: djd <dj...@cm...> > CC: min...@li... > > Yes, there is a libregex.a. However it is `suspicious' as it is exactly > the same size as > libgnurx.dll.a. I just now tried a binary compare (cmp libregex.a > libgnurx.dll.a) - they are identical??? That must be the reason, then: you don't actually have a static regex library, thus the linker has no choice but to leave the regex library dynamically loaded. > A pertinent point. Will a warning be issued if the -static switch is > set and a relevant *.a is missing, however the run-time version is > present? Well, you already know the answer to that, since you were in exactly this position, and saw what happens ;-) > Your guess was incorrect, but clouded by the issue that libregex.a is > just a copy of libgnurx.dll.a. > Do you still want the -v output? No. I guess you'll need to get the sources of that mingw-libgnurx package and build the static library yourself, to solve this. |