mingw:使用-std = c ++ 11编译时找不到函数

时间:2014-03-04 08:31:46

标签: c++ c++11 mingw popen stdio

我正在尝试编译下面的代码(来自https://stackoverflow.com/a/478960/683218)。 如果我用

编译,编译就可以了
$ g++ test.cpp

但在使用-std=c++11开关时出错:

$ g++ -std=c++11 test.cpp
test.cpp: In function 'std::string exec(char*)':
test.cpp:6:32: error: 'popen' was not declared in this scope
     FILE* pipe = popen(cmd, "r");
                                ^

知道发生了什么事吗?

(我在mingw.org和WindowsXP64上使用mingw32 gcc4.8.1)

代码:

#include <string>
#include <iostream>
#include <stdio.h>

std::string exec(char* cmd) {
    FILE* pipe = popen(cmd, "r");
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while(!feof(pipe)) {
        if(fgets(buffer, 128, pipe) != NULL)
            result += buffer;
    }
    pclose(pipe);
    return result;
}

int main() {}

2 个答案:

答案 0 :(得分:6)

我认为这是因为popen不是标准的ISO C ++(它来自POSIX.1-2001)。

您可以尝试:

$ g++ -std=c++11 -U__STRICT_ANSI__ test.cpp

-U取消之前定义的宏,无论是内置还是提供-D选项)

$ g++ -std=gnu++11 test.cpp

(GCC defines __STRICT_ANSI__当且仅当指定了-ansi开关或指定严格符合某些版本的ISO C或ISO C ++的-std开关时当GCC被调用时)

使用_POSIX_SOURCE / _POSIX_C_SOURCE宏可能是另一种选择(http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html)。

答案 1 :(得分:0)

只需在开头添加:

extern "C" FILE *popen(const char *command, const char *mode);