GoogleTest 1.6 with Cygwin 1.7 compile error: 'fileno' was not declared in this scope

前端 未结 2 570
北荒
北荒 2020-12-15 21:05

GoogleTest 1.6 with Cygwin 1.7: \'fileno\' was not declared in this scope

Error message when building a simple test on Factorial() function in Eclipse CDT:



        
相关标签:
2条回答
  • 2020-12-15 21:28

    Some functions go beyond the ANSI standard. These are disabled when you use std=c++11 (or std=c++0x).

    Among them are fdopen, fileno and strdup. There are two possibilities to use them:

    • Use the GNU dialect (std=gnu++11).
    • If you want to compile without dialect and make a local exception, you can include stdio.h with the __STRICT_ANSI__ undefined. (see: Error "'fdopen' was not declared" found with g++ 4 that compiled with g++3)

    I have tested both on Suse Linux Enterprise 11, MinGW and Cygwin.


    Addition: Another (possibly better) way to access non-ANSI symbols would be to add

    #define _POSIX_C_SOURCE 200809L
    

    before the first #include in your file. This will give you access to most of the non-standard routines.

    Some functions (e.g. realpath(...)) require

    #define _BSD_SOURCE
    

    to be inserted on top of your file.

    0 讨论(0)
  • 2020-12-15 21:40

    Setting the C++ standard to -std=gnu++0x rather than -std=c++0x, worked for me. You can try the statement:

    g++ -std=gnu++0x -DGTEST_OS_CYGWIN=1 -I"E:\source\gtest-1.6.0\include" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/challenge.d" -MT"src/challenge.d" -o "src/challenge.o" "../src/challenge.cpp"
    

    Setting symbol (-DGTEST_OS_CYGWIN=1) has got nothing to do with this error.

    0 讨论(0)
提交回复
热议问题