2016-01-13 26 views
5

Utilizzando VS 2015 e il suo nuovo modello di strumenti/progetto clang incorporato, non riesco a creare correttamente Google Test. Ottengo i seguenti errori:Impossibile creare Google Test con Visual Studio 2015 e Clang 3.7 con 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'? 

ho notato che la maggior parte di tali dichiarazioni sono all'interno di questi blocchi ANSI-controllo:

#if !__STDC__ 
... 
#endif 

C'è un'impostazione progetto o qualcosa che posso cambiare per ottenere questi metodi risolvere?

risposta

1

Ho affrontato problemi simili con chdir e freopen.

Pubblicherò appena i passaggi che ho preso, per ottenere googletest attivo e funzionante con VS2015 e Clang.

  • Ottenere uno snapshotbuild LLVM per Windows. http://llvm.org/builds/
    (Assicurarsi di scaricare la versione corretta (32/64-bit))

Questo installerà una versione recente di clang (al momento della scrittura v3.9). Tieni presente che questa è una build di istantanee e non una versione ufficiale.

Se non ti piacciono le build di istantanee, magari prova l'ultima versione. Non l'ho provato Mi piacerebbe avere strumenti aggiornati, specialmente quando sono frenetici come LLVM/Clang.

  • Dopo l'installazione è necessario ottenere le voci nelle proprietà del progetto di Visual Studio. Properties ->General ->Platform Tools ->LLVM-vs2014 (e più) (Passa alla LLVM-vs2014)

Sono consapevole che si sta chiedendo Clang 3.7 con Microsoft CodeGen. Devi decidere da solo.
Inoltre, non mi piace applicare alcune correzioni/modifiche al codice che non ho scritto o non so. Dato che questo ha funzionato bene per me, non ho indagato ulteriormente il problema.

A questo punto potrebbe già funzionare per voi. I passi successivi descrivono la costruzione di librerie googletest e l'aggiunta delle directory di inclusione al progetto.

  • Ottenere googletest da github. https://github.com/google/googletest

  • Eseguire cmake-gui e configurare googletest per essere in grado di creare.

    Generator: Visual Studio 14 2015 Win64 (io ho usato solo a 64 bit, è possibile anche prova 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.

  • Use default compilatori nativi

Dove è la fonte codice: (es .: C:\libs\googletest\googletest)
(Perché c'è anche googlemock nella directory principale)

Dove costruire i file binari: (ad es. C:\libs\googletest\build)

  • Deseleziona: BUILD_SHARED_LIBS (costruire librerie condivise se si desidera) CMAKE_CONFIGURATION_TYPES: Debug e Release (scegliere altri se vi piace)
    ricordare o cambiamento:. CMAKE_INSTALL_PREFIX (ex C:\libs\googletest\install)

Python 2.7 è stato trovato da cmake, anche se sono abbastanza sicuro che non sia necessario.
Premere Configura e Genera.

  • Dopo aver generato il file di soluzione, passare alla directory specificata in precedenza (dove costruire i binari, es. C:\libs\googletest\build) e aprire il gtest.sln soluzione.

  • Scegliere la configurazione della soluzione di debug e fare clic con il tasto destro su ALL_BUILD e Build. Al termine, fare clic con il tasto destro su INSTALL e Build. Questo crea le cartelle specificate in precedenza.

  • CMAKE_INSTALL_PREFIX (es. C:\libs\googletest\install) in là si potrebbe voler cambiare il nome librerie e aggiungere un * d.lib per mantenere i file di sovrascrivere e come designatore che era la build di debug.

  • Ripetere i passaggi per la configurazione della soluzione di rilascio. In CMAKE_INSTALL_PREFIX (ex C:\libs\googletest\install) si dovrebbe trovare una directory di inclusione e una directory di lib.

  • Nel progetto in Proprietà -> Directory VC++ aggiungere Include directory. CMAKE_INSTALL_PREFIX<b>\include</b> (Es. C:\libs\googletest\install<b>\include</b>)

  • Nel progetto in Proprietà - Rubriche> VC++ Aggiungi libreria Directories. CMAKE_INSTALL_PREFIX \ lib:

  • E sotto Properties ->Linker ->Input ->Additional Dependencies (gtest.lib/gtestd.lib seconda (ex C \ libs \ googletest \ install \ lib.) la vostra configurazione)

Dopo che sono stato in grado di costruire ed eseguire i miei test.

+0

Ci scusiamo per la pazza risposta in ritardo. Sono appena tornato a questo problema dopo una lunga pausa dai miei progetti, e esito a contrassegnarlo come la risposta accettata, perché sto cercando di ottenere il massimo da lavorare con il toolkit clang incorporato di VS2015. Sono sicuro di poter passare a una build di snapshot LLVM e farlo compilare bene, e potrei farlo se tutto il resto fallisce. (E in tal caso segnerò questa risposta corretta). – WhittlesJr

1

A causa di problemi di debugging con LLVM/Clang più recenti, ho trascorso un po 'di tempo con VS2015, Clang 3.7 e googletest.

Ho compilato le librerie googletest come menzionato in un'altra risposta. Quindi passare a "Clang 3.7 con Microsoft CodeGen (v140_clang_3_7)" per creare il mio progetto googletest.

uscita

Esempio di errore:
.... GTEST/interno/GTEST-port.h (2384,35): errore: uso di identificatore non dichiarato 'vicino'
inline int Chiudi (int fd) {return close (fd); }

Nella documentazione di Microsoft si possono trovare:

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

Questo è lo stesso con abbastanza alcuni più funzioni.

Basta google per "visual studio xxx", dove xxx è fdopen o chdir. Si dovrebbe ottenere un collegamento alla documentazione in cui è possibile trovare il nuovo metodo. (Di solito un trattino basso davanti al nome.)

Una volta che sai cosa usare, vai all'errore (usa l'uscita VS per andare lì), qui gtest-port.h (2384,35).

Apportare la modifica, qui
... return close (fd);
a
... ritorno _ close (fd);
e così via.

Successivamente i miei test hanno funzionato come al solito. Ho dovuto sbarazzarmi anche di alcuni avvertimenti.