On 04/27/2015 08:14 PM, Gregg Smith wrote:
On 4/27/2015 4:07 PM, Jeff Trawick wrote:
On 04/27/2015 08:28 AM, Jeff Trawick wrote:
On 04/27/2015 08:15 AM, Jeff Trawick wrote:
On 04/26/2015 11:59 PM, Gregg Smith wrote:
On 4/25/2015 6:39 AM, Jeff Trawick wrote:
+/-1
[  ] Release APR 1.5.2 as GA

Win 8.1, VS 2013 x86, zip, retro build
apr tests lib&dll pass
httpd-2.4.12 build regression

Win Vista, VS 2008 x86, zip, retro build
apr tests lib&dll pass
httpd-2.4.12 build regression
apr-1.lib(rand.obj) : error LNK2019: unresolved external symbol __imp__UuidCreate@4 referenced in function _apr_os_uuid_get@4 This happens on many projects in /support that link to the static lib (ab, httdigest, etc.).

I'm kind of stumped as to what change has done this. I can easily compensate for it in httpd and is probably the best way on the retro build.

I'm +/-0


My best guess as to the trigger: file_io/win32/pipe.c now uses apr_generate_random_bytes() which is implemented in the same file that has the only call to UuidCreate() (rand.obj).


Gregg, can you comment out the apr_generate_random_bytes() call and the apr_escape_hex() call just below in file_io/win32/pipe.c and verify that the build problem goes away?

I just did a release build of 1.5.1 and 1.5.2 and see the external reference to UuidCreate in both (...UNDEF...External...__imp_UuidCreate).

Can you add rpcrt4 to at least one httpd support program and see if it succeeds in linking with the original 1.5.2 code?

It is unfortunate that there is

* no doc to tell user which system libraries to use when linking with apr-1.lib * no APR build script/setting to tell user's build system which system libraries to use when linking with apr-1.lib

httpd includes rpcrt4 in two of the support/*.dsp files and omits it from the rest. It is natural to want to add libraries only where required, but it isn't something that httpd can expect to work as-is forever.

I think this will work, I did as much to get a full httpd build I believe yesterday.


(I see this in apr/test/Makefile.win: LD_LIBS = kernel32.lib advapi32.lib ws2_32.lib wsock32.lib ole32.lib shell32.lib rpcrt4.lib which is as much a sample as we have AFAIK.)


I wonder if some objects can be omitted from apr-1.lib based on their use within the library :( I see " /OPT:REF eliminates functions and data that are never referenced; /OPT:NOREF keeps functions and data that are never referenced. ... By default, /OPT:REF is enabled in non-debug builds." at https://msdn.microsoft.com/en-us/library/bxwfs976.aspx


This comment is missing the point IIUC: /OPT:REF|NOREF is not applicable to linking apr-1.lib; it is applicable to something that links against it.

(the idea being that we didn't notice the need for an extra Windows library in parts of httpd that link apr statically in the past because the code which calls UuidCreate() was omitted)

httpd/2.4.x/support/passwd_common.c uses apr_generate_random_bytes; that presumably uses the apr static library too, so this doesn't seem to hold water.


I had some outpatient surgery done this morning so sorry if I sound quite out of it.

Speedy recovery!

Yes, changes in the past have caused the need to have it added to specific projects. This is why I am perfectly happy with adding it to all the support projects in httpd, that really is about the only way to go (though I ran out of time to test a couple other ideas), that or simply link to the dll which already has it. It's also why I did not -1 this release. It's not a showstopper IMO.

I'll however try to confirm tomorrow, for sure Wednesday. I realize that Wednesday goes beyond the 72 hours.

Thanks for RMing BTW

YW.


Reply via email to