[cfe-dev] Trying again - building 64bit code on Windows

Yaron Keren via cfe-dev cfe-dev at lists.llvm.org
Tue Aug 25 05:12:30 PDT 2015


This has nothing to do with exception handling nor with clang specifically.
This is a DLL dependency created for a program compiled with mingw 32 bits
dwarf exception, dynamic linking to libgcc. The usual solution is to bundle
the above DLLs along with clang*.exe at the same directory clang*.exe is.
Another alternative is to build clang with the flags -static-libgcc
-static-libstdc++ so that clang.exe will include a static copy of libgcc.
Google "mingw static-libgcc dependency" for more explainations and examples.




2015-08-25 15:02 GMT+03:00 Edward Diener via cfe-dev <cfe-dev at lists.llvm.org
>:

> On 8/25/2015 6:30 AM, Edward Diener via cfe-dev wrote:
>
>> On 8/25/2015 2:41 AM, Yaron Keren via cfe-dev wrote:
>>
>>> That looks likea collision between the 32 bit and 64 bit versions of
>>> mingw.
>>> Which version of 32 bit and 64 bit versions exactly do you, could you
>>> provide download links?
>>> I ask because there are several mingw distributions around and they are
>>> different.
>>>
>>
>> The 32-bit version of mingw-64/gcc I am using is:
>>
>> i686-5.1.0-posix-dwarf-rt_v4-rev0
>>
>> The 64-bit version of mingw-64/gcc I am using is:
>>
>> x86_64-5.1.0-posix-seh-rt_v4-rev0
>>
>> I use the mingw-64 installer called 'mingw-w64-install.exe' to install
>> various flavors of mingw-64.
>>
>> If I run dependency walker on the 32-bit version of clang I have built
>> from source with the 32-bit version of mingw-64/gcc above it shows a
>> dependency in the clang++.exe on:
>>
>>
>> c:\utilities\mingw-w64\i686-5.1.0-posix-dwarf-rt_v4-rev0\mingw32\bin\LIBGCC_S_DW2-1.DLL
>>
>>
>> c:\utilities\mingw-w64\i686-5.1.0-posix-dwarf-rt_v4-rev0\mingw32\bin\LIBSTDC++-6.DLL
>>
>>
>> This means that the build of clang from source is linking to
>> mingw-64/gcc 32-bit DLLs needed to run clang. So the build constrains
>> clang to run only with the version of mingw-64/gcc with which it was
>> built.
>>
>
> I want to correct this. It does not mean that the build constrains clang
> to run only with the version of mingw-64/gcc with which it was built. But
> it does mean that when this clang runs it must find a LIBGCC_S_DW2-1.DLL
> and a LIBSTDC++-6.DLL in its PATH which it can use. Unfortunately the
> 64-bit versions of mingw-64/gcc do not support dwarf exception handling,
> which is where I think the dependency on LIBGCC_S_DW2-1.DLL comes from for
> the 32-bit version. The only common exception handling between the 32-bit
> and 64-bit versions of mingw-64/gcc is 'sjlj'. I will try building clang
> with a mingw-64/gcc 32-bit release that supports 'sjlj' exception handling
> and then see if it can run with a mingw-64/gcc 64-bit release that also
> supports 'sjlj' exception handling in order to create 64-bit code.
>
>
>
>> I did not change any of the default CMake build parameters that I know
>> of. Is there a CMake build parameter which removes this constraint so
>> that the version of clang is not dependent on the version of
>> mingw-64/gcc with which it is built ?
>>
>>
>>>
>>> 2015-08-25 7:43 GMT+03:00 Edward Diener via cfe-dev
>>> <cfe-dev-NBbBogny7ofFcdTEL8lfRQ at public.gmane.org
>>> <mailto:cfe-dev-NBbBogny7ofFcdTEL8lfRQ at public.gmane.org>>:
>>>
>>>     On 8/24/2015 11:38 PM, Yaron Keren via cfe-dev wrote:
>>>
>>>             Evidently to build a version of clang on Windows targeting
>>>             mingw-64/gcc, which can compile 64-bit code, one must build
>>>             clang with a 64-bit version of mingw-64/gcc. This may be
>>>             apparent to you and other clang developers but it was not
>>>             apparent to me.
>>>
>>>
>>>         clang may be built with any supported regardless the target. For
>>>         example, I'm building clang using Visual C++ 64 bit and
>>>         targetting the
>>>         32-bit version of mingw. You do need to have the target mingw
>>>         installed
>>>         for the include files, library files and linker.
>>>
>>>
>>>     Please see my other response in this thread to Ivan. My experience
>>>     is clearly that a 32-bit version of clang does not work when a
>>>     64-bit version of mingw-64/gcc is first in the Windows PATH. I also
>>>     explained this previously in my post "Clang on Windows targeting
>>>     mingw-64/gcc building 64bit code", which was unanswered.
>>>
>>>
>>>
>>>
>>>         2015-08-25 5:15 GMT+03:00 Edward Diener via cfe-dev
>>>
>>> <cfe-dev-NBbBogny7ofFcdTEL8lfRQ-XMD5yJDbdMReXY1tMh2IBg at public.gmane.org
>>>
>>> <mailto:
>>> cfe-dev-NBbBogny7ofFcdTEL8lfRQ-XMD5yJDbdMReXY1tMh2IBg at public.gmane.org>
>>>
>>>
>>> <mailto:
>>> cfe-dev-NBbBogny7ofFcdTEL8lfRQ-XMD5yJDbdMReXY1tMh2IBg at public.gmane.org
>>>
>>>
>>> <mailto:
>>> cfe-dev-NBbBogny7ofFcdTEL8lfRQ-XMD5yJDbdMTcBkidbGgD4Q at public.gmane.orgg
>>> >>>:
>>>
>>>
>>>              On 8/24/2015 6:27 PM, Hans Wennborg via cfe-dev wrote:
>>>
>>>                  On Mon, Aug 24, 2015 at 2:36 PM, Edward Diener via
>>> cfe-dev
>>>                  <cfe-dev-NBbBogny7ofFcdTEL8lfRQ at public.gmane.org
>>>         <mailto:cfe-dev-NBbBogny7ofFcdTEL8lfRQ at public.gmane.org>
>>>
>>>
>>> <mailto:
>>> cfe-dev-NBbBogny7ofFcdTEL8lfRQ-XMD5yJDbdMReXY1tMh2IBg at public.gmane.org
>>>
>>>
>>> <mailto:
>>> cfe-dev-NBbBogny7ofFcdTEL8lfRQ-XMD5yJDbdMReXY1tMh2IBg at public.gmane.org
>>> >>>
>>>
>>>         wrote:
>>>
>>>                      Is clang built form the latest svn source capable of
>>>                      creating 64-bit code on
>>>                      a Microsoft Windows 64-bit OS ?
>>>
>>>
>>>                  Yes. We build 64-bit Chromium on Windows with Clang
>>>         continuously.
>>>
>>>                      If yes, is this done through the -m64 option
>>>                      or do I have to build clang from source in some
>>>         particular
>>>                      way to enable the
>>>                      functionality ?
>>>
>>>
>>>                  Yes, using clang-cl -m64 is how we do it.
>>>
>>>
>>>              Evidently to build a version of clang on Windows targeting
>>>              mingw-64/gcc, which can compile 64-bit code, one must build
>>>         clang
>>>              with a 64-bit version of mingw-64/gcc. This may be apparent
>>>         to you
>>>              and other clang developers but it was not apparent to me.
>>>
>>>              I would like to add to the documentation on the clang
>>> "Getting
>>>              Started: Building and Running Clang" page at
>>>         http://clang.llvm.org/get_started.html a section of
>>> documentation
>>>              following the section "Using Visual Studio" called "Using
>>>              mingw(-64)/gcc". This section would explain how to build
>>>         clang on
>>>              Windows using ninja, CMake, and a mingw(-64)/gcc
>>>         implementation and
>>>              how to run clang from the command line using a
>>>         mingw(-64)/gcc RTL. I
>>>              am willing to completely write this documentation, to be
>>>         vetted by
>>>              whatever clang developer takes care of that "Getting
>>>         Started" page,
>>>              in order to help other developers build and run clang on
>>>         Windows
>>>              with the mingw(-64)/gcc RTL.
>>>
>>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150825/d4e5a200/attachment.html>


More information about the cfe-dev mailing list