2016-01-13 14 views
5

Używając VS 2015 i nowego wbudowanego zestawu narzędzi/szablonu zestawu klang, nie mogę pomyślnie zbudować testu Google. Otrzymuję następujące błędy:Nie można zbudować testu Google z Visual Studio 2015 i Clang 3.7 z Microsoft CodeGen

Error  use of undeclared identifier 'chdir'; did you mean '_chdir'?  
Error  use of undeclared identifier 'fdopen' 
Error  use of undeclared identifier 'read' 
Error  use of undeclared identifier 'write'  
Error  use of undeclared identifier 'close' 
Error  use of undeclared identifier 'O_RDONLY' 
Error  use of undeclared identifier 'O_APPEND' 
Error  use of undeclared identifier 'dup'; did you mean '_dup'? 
Error  use of undeclared identifier 'creat'; did you mean '_creat'? 

Zauważyłem, że większość tych deklaracji są w tych ANSI sprawdzania bloków:

#if !__STDC__ 
... 
#endif 

Czy jest ustawienie projektu lub coś, co mogę zmienić, aby te metody rozwiązać?

Odpowiedz

1

Miałem podobne problemy z chdir i freopen.

Po prostu opublikuję kroki, które zrobiłem, aby uzyskać najlepsze wyniki w działaniu z VS2015 i Clang.

  • Uzyskaj obraz stanu LLVM dla systemu Windows. http://llvm.org/builds/
    (Upewnij się pobrać odpowiednią wersję (32-/64-bitowy))

Spowoduje to zainstalowanie najnowszej wersji brzękiem (w chwili pisania v3.9). Należy pamiętać, że jest to kompilacja migawki, a nie wersja oficjalna.

Jeśli nie lubisz wersji snapshot, może wypróbuj najnowszą wersję. Nie testowałem tego. Po prostu lubię mieć aktualne narzędzia, zwłaszcza gdy działają w szybkim tempie, jak LLVM/Clang.

  • Po instalacji należy uzyskać wpisy we właściwościach projektu Visual Studio. Properties ->General ->Platform Tools ->LLVM-vs2014 (i więcej) (Przełącz na LLVM-vs2014)

Jestem świadomy, że prosisz o Clang 3.7 z Microsoft Codegen. Musisz sam podjąć decyzję.
Ponadto nie lubię stosować poprawek/zmian w kodzie, których nie napisałem lub nie wiem. Ponieważ wszystko dobrze się sprawdziło, nie badałem problemu.

W tym momencie może już działać dla Ciebie. Kolejne kroki opisują tworzenie bibliotek googletest i dodawanie katalogów z zawartością do projektu.

  • Pobierz aplikację googletest z github. https://github.com/google/googletest

  • Uruchom cmake-gui i skonfiguruj googletest, aby móc budować.

    Generator: Visual Studio 14 2015 Win64 (użyłem tylko 64bit, można również try 32bit)

From the llvm documentation
(no link because not enough reputation: clang.llvm.org/docs/MSVCCompatibility.html):

First, Clang attempts to be ABI-compatible, meaning that Clang-compiled code should be able to link against MSVC-compiled code successfully.

  • Użyj domyślnego natywne kompilatory

Gdzie jest źródło kod: (np. C:\libs\googletest\googletest)
(ponieważ w górnym katalogu znajduje się również googlemock)

Gdzie budować pliki binarne: (np. C:\libs\googletest\build)

  • Odznacz: BUILD_SHARED_LIBS (budowanie wspólnych bibliotekami jeśli chcesz) CMAKE_CONFIGURATION_TYPES: Debug i Release (wybierz innych, jeśli chcesz)
    Pamiętaj lub zmiana. CMAKE_INSTALL_PREFIX (ex C:\libs\googletest\install)

Python 2.7 został znaleziony przez cmake, chociaż jestem pewien, że nie jest to konieczne.
Naciśnij przycisk Konfiguruj i wygeneruj.

  • Po wygenerowaniu pliku rozwiązanie, przejdź do katalogu określonym powyżej (Gdzie zbudować binaria, ex. C:\libs\googletest\build) i otwórz gtest.sln rozwiązanie.

  • Wybierz konfigurację rozwiązania Debug i kliknij prawym przyciskiem myszy ALL_BUILD i Build. Po zakończeniu kliknij prawym przyciskiem myszy INSTALUJ i kompiluj. Spowoduje to utworzenie folderów określonych wcześniej.

  • CMAKE_INSTALL_PREFIX (ex. C:\libs\googletest\install) tam może chcesz zmienić nazwę libs i dodaj * d.lib zachować pliki z zastąpieniem i jako oznacznik że to kompilacja debugowania.

  • Powtórz kroki dla konfiguracji Release rozwiązań. W CMAKE_INSTALL_PREFIX (np. C:\libs\googletest\install) powinieneś znaleźć katalog include i katalog lib.

  • W swoim projekcie w obszarze Właściwości -> VC++ Katalogi dodaj Dołącz katalogi. CMAKE_INSTALL_PREFIX<b>\include</b> (. Ex C:\libs\googletest\install<b>\include</b>)

  • w projekcie pod Właściwości -> VC++ Directories dodać Library Directories. CMAKE_INSTALL_PREFIX \ lib:

  • A pod Properties ->Linker ->Input ->Additional Dependencies (gtest.lib/gtestd.lib zależności (ex C \ libs \ googletest \ zainstalować \ lib). twoja konfiguracja)

Później mogłem zbudować i przeprowadzić testy.

+0

Przepraszamy za zwariowaną spóźnioną odpowiedź. Właśnie wracam do tego problemu po długiej przerwie od moich projektów, i waham się oznaczyć to jako zaakceptowaną odpowiedź, ponieważ próbuję uzyskać gtest do pracy z wbudowanym zestawem narzędzi klang VS2015. Jestem pewien, że mógłbym przełączyć się na kompilację LLVM i skompilować ją dobrze, i mogę to zrobić, jeśli wszystko inne zawiedzie. (W takim przypadku zaznaczę poprawną odpowiedź.) – WhittlesJr

1

Z powodu problemów z debugowaniem nowszym LLVM/Clang, spędziłem trochę czasu z VS2015, Clang 3.7 i googletest.

I skompilowałem biblioteki googletest, jak wspomniano w innej odpowiedzi. Następnie zmieniono na "Klang 3.7 z Microsoft CodeGen (v140_clang_3_7)", aby zbudować mój projekt googletest.

wyjście

próbki błędu:
.... numeru GTEST/wewnętrzny/numeru GTEST-port.h (2384,35): error: wykorzystanie identyfikatora nierejestrowanej 'blisko'
inline int Close (int fd) {return zamknij (fd); }

W dokumentacji firmy Microsoft można znaleźć:

Example with fdopen
fdopen: This POSIX function is deprecated. Use the ISO C++ conformant _fdopen instead.
https://msdn.microsoft.com/en-us/library/ms235351.aspx

To samo jest z jakiegoś więcej funkcji.

Wystarczy google dla "visual studio xxx", gdzie xxx to fdopen lub chdir. Powinieneś uzyskać link do dokumentacji, gdzie można znaleźć nową metodę. (Zwykle podkreślenie przed nazwą.)

Kiedy już wiesz, czego używać, przejdź do błędu (użyj wyjścia VS, aby przejść tam), tutaj gtest-port.h (2384,35).

Wprowadź zmianę, tutaj
... return close (fd);
do
... return _ zamknij (fd);
i tak dalej.

Po tym czasie moje testy działały jak zwykle. Musiałem też pozbyć się niektórych ostrzeżeń.

Powiązane problemy