<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><br><br><div>> To: williambader@hotmail.com<br>> Subject: RE: [poppler] Poppler provided printf() functions on Windows not  language compliant<br>> Date: Sun, 6 Mar 2016 13:18:49 -0800<br>> From: mathog@caltech.edu<br>> CC: poppler@lists.freedesktop.org<br>> <br>> On 06-Mar-2016 12:22, William Bader wrote:<br>> <br>> > Can you add -v to the compile command to show the full link line? g++<br>> > adds a number of libraries automatically, and probably mingw adds some<br>> > additional Windows libraries.<br><br>...</div><div><br></div><div>> COMPILER_PATH=c:/progs/mingw/bin/../libexec/gcc/mingw32/4.6.2/;c:/progs/mingw/bin/../libexec/gcc/;c:/progs/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/<br>> LIBRARY_PATH=c:/progs/mingw/bin/../lib/gcc/mingw32/4.6.2/;c:/progs/mingw/bin/../lib/gcc/;c:/progs/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/lib/;c:/progs/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../<br>> COLLECT_GCC_OPTIONS='-v' '-o' 'printf_bug.exe' '-LC:\progs\devlibs61/lib' '-shared-libgcc' '-mtune=i386' '-march=i386'<br>>   c:/progs/mingw/bin/../libexec/gcc/mingw32/4.6.2/collect2.exe -Bdynamic <br>> -u ___register_frame_info -u ___deregister_frame_info -o pri<br>> ntf_bug.exe c:/progs/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../crt2.o <br>> c:/progs/mingw/bin/../lib/gcc/mingw32/4.6.2/crtbegin.o -LC:\<br>> progs\devlibs61/lib -Lc:/progs/mingw/bin/../lib/gcc/mingw32/4.6.2 <br>> -Lc:/progs/mingw/bin/../lib/gcc -Lc:/progs/mingw/bin/../lib/gcc/mi<br>> ngw32/4.6.2/../../../../mingw32/lib <br>> -Lc:/progs/mingw/bin/../lib/gcc/mingw32/4.6.2/../../.. <br>> C:\DOCUME~1\david\LOCALS~1\Temp\cco5h1f7.<br>> o -lpoppler -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex <br>> -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_<br>> s -lgcc -lmoldname -lmingwex -lmsvcrt <br>> c:/progs/mingw/bin/../lib/gcc/mingw32/4.6.2/crtend.o</div><div><br></div><div><br></div><div>The collect2 command line does the linking. <a href="https://gcc.gnu.org/onlinedocs/gccint/Collect2.html" target="_blank" style="font-size: 12pt;">https://gcc.gnu.org/onlinedocs/gccint/Collect2.html</a></div><div><br></div><div>It pulls in both the mingw32 library and the msvcrt library.</div><div><br></div><div>I think that the problem is that you are getting part of stdio from one library and part from another, and they are not compatible.</div><div><br></div><div>Compile once with -c so you have the .o file of your test program, and then try running the link without -lmsvcrt to see what comes up undefined. That might give a clue to what the link is pulling from msvcrt that might be incompatible with mingw32.  I haven't used mingw enough to know whether it is supposed to get stdio from libmingw32 or libmsvcrt.</div><div><br></div><div>I googled libmingw32 to see what might be in it, and I found the link below that mentions a conflict between mingw32 and a Windows library.</div><div><br></div><div><a href="https://forum.qt.io/topic/27564/adding-libcmt-lib-conflicts-with-libmingw32-a-default-lib/2" target="_blank">https://forum.qt.io/topic/27564/adding-libcmt-lib-conflicts-with-libmingw32-a-default-lib/2</a></div><div><br></div><div><br></div><div>> jazzynico posted a version as an attachment for message 6 here:<br>> <br>>     https://bugs.launchpad.net/inkscape-devlibs/+bug/1552913<br></div><div><br></div><div><br></div><div>I looked at it. I have Fedora 23 Linux. Neither nm or objdump could open it, but ar could unpack libpoppler.dll.a, and then I could run .o files (in i386 COFF format) through strings. I found a reference to printf in d006434.o, and a reference to sprintf in d006436.o, but those modules are so small that they are probably just relocation entries rather than code. I could also run nm on libpoppler-58.dll. <span style="font-size: 12pt;">Dynamic linking is trickier to implement in COFF than in ELF and takes more work to set up. I think that the printf and sprintf code in libpoppler is just a stub for the dynamic linker. Someone with more experience with mingw might know for sure.</span></div><div><br></div><div>William</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div>                                    </div></body>
</html>