2016-03-10 76 views
0

我準備了一個針對32位Windows的llvm-clang編譯器。我使用3.7.1並應用this patch。我得到的東西,幾乎的作品,除了我有提升錯誤。在Windows下Mingw + clang vs Boost:不同類型的錯誤

如果我編譯我的項目(即通常與MinGW的海灣合作委員會的工作)使用我平時提升1.53頭我有麻煩,包括boost/interprocess組件

In file included from [...]/Boost/include-WINDOWS/boost-1_53\boost/interprocess/sync/interprocess_semaphore.hpp:24: 
In file included from [...]/Boost/include-WINDOWS/boost-1_53\boost/interprocess/exceptions.hpp:20: 
In file included from [...]/Boost/include-WINDOWS/boost-1_53\boost/interprocess/errors.hpp:37: 
[...]/Boost/include-WINDOWS/boost-1_53\boost/interprocess/detail/win32_api.hpp:878:48: error: conflicting types for 'VirtualProtect' 

如果我再嘗試recompile boost有:

bootstrap.bat mingw 
b2 toolset=clang --with-thread --with-filesystem --with-signals --with-test --with-system --with-regex --with-program_options --with-serialization variant=release link=shared threading=multi 

取決於各種版本的提升,我得到很多警告,我可以嘗試忽略,但也有一些錯誤:

1.56 1.57只是這些:(並不多,但我不知道如何擺脫它)

In file included from libs\serialization\src\xml_wiarchive.cpp:35: 
.\boost/archive/impl/archive_serializer_map.ipp:41:34: error: redeclaration of 'boost::archive::detail::archive_serializer_map::insert' cannot add 'dllexport' attribute 
archive_serializer_map<Archive>::insert(const basic_serializer * bs){ 
           ^
.\boost/archive/detail/archive_serializer_map.hpp:42:17: note: previous declaration is here 
    static bool insert(const basic_serializer * bs); 
       ^
In file included from libs\serialization\src\xml_wiarchive.cpp:35: 
.\boost/archive/impl/archive_serializer_map.ipp:49:34: error: redeclaration of 'boost::archive::detail::archive_serializer_map::erase' cannot add 'dllexport' attribute 
archive_serializer_map<Archive>::erase(const basic_serializer * bs){ 
           ^
.\boost/archive/detail/archive_serializer_map.hpp:43:17: note: previous declaration is here 
    static void erase(const basic_serializer * bs); 
       ^
In file included from libs\serialization\src\xml_wiarchive.cpp:35: 
.\boost/archive/impl/archive_serializer_map.ipp:61:34: error: redeclaration of 'boost::archive::detail::archive_serializer_map::find' cannot add 'dllexport' attribute 
archive_serializer_map<Archive>::find(
           ^
.\boost/archive/detail/archive_serializer_map.hpp:44:37: note: previous declaration is here 
    static const basic_serializer * find(
            ^

爲1.59和1.60一堆MMX相關的錯誤,這就是,只要我所看到的,而不是功能準備我的LLVM-鐺時,我可以控制:

clang-linux.compile.c++.without-pth bin.v2\libs\thread\build\clang-linux-3.7.1\debug\threading-multi\win32\thread.obj 
In file included from libs\thread\src\win32\thread.cpp:17: 
In file included from .\boost/thread/thread_only.hpp:15: 
In file included from .\boost/thread/win32/thread_data.hpp:11: 
In file included from .\boost/thread/win32/thread_primitives.hpp:18: 
In file included from .\boost/detail/interlocked.hpp:154: 
In file included from C:\Programs\LLVM\bin\..\lib\clang\3.7.1\include\intrin.h:26: 
In file included from C:\Programs\MinGW\i686-w64-mingw32\include\Intrin.h:154: 
In file included from C:\Programs\LLVM\bin\..\lib\clang\3.7.1\include\mm3dnow.h:27: 
C:\Programs\LLVM\bin\..\lib\clang\3.7.1\include\mmintrin.h:28:2: error: "MMX instruction set not enabled" 
#error "MMX instruction set not enabled" 
^ 
In file included from libs\thread\src\win32\thread.cpp:17: 
In file included from .\boost/thread/thread_only.hpp:15: 
In file included from .\boost/thread/win32/thread_data.hpp:11: 
In file included from .\boost/thread/win32/thread_primitives.hpp:18: 
In file included from .\boost/detail/interlocked.hpp:154: 
In file included from C:\Programs\LLVM\bin\..\lib\clang\3.7.1\include\intrin.h:26: 
In file included from C:\Programs\MinGW\i686-w64-mingw32\include\Intrin.h:154: 
C:\Programs\LLVM\bin\..\lib\clang\3.7.1\include\mm3dnow.h:42:41: error: use of undeclared identifier '__v8qi' 
    return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); 
             ^
C:\Programs\LLVM\bin\..\lib\clang\3.7.1\include\mm3dnow.h:42:55: error: use of undeclared identifier '__v8qi' 
    return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); 
                ^
C:\Programs\LLVM\bin\..\lib\clang\3.7.1\include\mm3dnow.h:47:38: error: cannot convert '__m64' to '__v2sf' (vector of 2 'float' values) without a conversion operator 
    return (__m64)__builtin_ia32_pf2id((__v2sf)__m); 
            ^~~~~~~~~~~ 
C:\Programs\LLVM\bin\..\lib\clang\3.7.1\include\mm3dnow.h:52:38: error: cannot convert '__m64' to '__v2sf' (vector of 2 'float' values) without a conversion operator 
    return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); 
            ^~~~~~~~~~~~ 
C:\Programs\LLVM\bin\..\lib\clang\3.7.1\include\mm3dnow.h:52:52: error: cannot convert '__m64' to '__v2sf' (vector of 2 'float' values) without a conversion operator 
    return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); 
                ^~~~~~~~~~~~ 

是否有一種方式來獲得提升鏗鏘的32位工作在Windows下的MinGW的設置的任何版本?

我也試過llvm 3.8.0,但我不能準備它,因爲我的MinGW工具鏈不支持C++ 11的某些部分(以及其他版本,我嘗試過,請參閱here)。

+0

對於第二個問題,它可能與[該補丁(http://lists.llvm.org/pipermail/llvm-commits/Week -of-MON-20151109/312887.html) – Antonio

回答

-1

至於boost.thread: 加入-msse(或其他)之後(即解決MMX指令集不啓用錯誤)只需添加到-DBOOST_USE_WINDOWS_H在CXXFLAGS Windows頭文件,並在推動解決許多系統功能不同的聲明。約會時間。

例如: CXXFLAGS = 「 - MSSE -DBOOST_USE_WINDOWS_H」