CodeBlocks/MinGW C++ 컴파일러에서 "_popen()"을 사용하여 함수를 컴파일하려고합니다. 그러나 컴파일러는 함수를 찾을 수 없습니다. stdio.h 헤더 파일을 grep하고 "_popen"이 정의되어 있지만 ifdef 때문에 선택되지 않았 음을 확인합니다. CodeBlocks 컴파일러를 사용하여 _popen, _wpopen, popen 또는 wpopen 또는 이와 유사한 것을 컴파일 할 수 있도록 컴파일을 설정하는 방법은 무엇입니까?Windows CodeBlocks/MinGW에서 _popen() 및 _pclose()를 찾을 수 없습니다. 16.01
여기 CodeBlocks에서 컴파일되지 않습니다 코드의 예 :
#include <cstdio>
#include <cstdlib>
#include <deque>
using namespace std;
// System(cmd) and capture output of command
int SystemCapture(string cmd, deque<string>& cmdout, int& RetCode)
{
RetCode = 0;
FILE* Pipe = _popen(cmd.c_str(), "rt");
if(!Pipe)
return -1;
char Buffer[128];
while(fgets(Buffer, 128, Pipe)) {
cmdout.push_back(Buffer);
}
if (feof(Pipe)) {
RetCode =_pclose(Pipe);
return 0;
}
return -2;
}
는 어떤 차이가 있는지 모르겠어요,하지만 내 컴파일러 플래그 ++ (11)가 활성화 c를 가지고있다.
오류 메시지 _popen의 프로토 타입이 헤더 파일 "stdio.h"에 정의되어 있지 않은 것처럼 보입니다. 그러나 Microsoft 설명서에 이것이 _popen()이있는 곳이라고 나와 있습니다.
오류 메시지 BUILD.LOG 탭에서 : 나는 사용법 #include 아래 내 자신의 프로토 타입을 추가하는 시도
mingw32-g++.exe -Wall -fexceptions -g -std=c++11 -g
-c MyCode.cpp -o obj\Debug\MyCode.o
MyCode.cpp:270:42: error: '_popen' was not declared in this scope
FILE* Pipe = _popen(cmd.c_str(), "rt");
^
MyCode.cpp:281:27: error: '_pclose' was not declared in this scope
RetCode =_pclose(Pipe);
^
Process terminated with status 1 (0 minute(s), 1 second(s))
2 error(s), 0 warning(s) (0 minute(s), 1 second(s))
: 여기 Codeblocks에서 오류 메시지의
FILE* _popen (const char*, const char*);
int _pclose (FILE*);
는 그런 컴파일러의 링크 단계가 실패 다음을 입력하십시오 :
undefined reference to _popen(char const*, char const*)
undefined reference to _pclose(_iobuf*)
다음과 같은 변형으로 popen의 이름을 변경했습니다. popen, _popen, _wpopen, wpopen
아무 래도 그 행운이 없습니다. 내가 STDIO.H을 grep을 경우
그러나, 나는
당신은'using namespace std; '를 사용하지 않고 코드를 컴파일하지 않습니다. – kiwixz
컴파일 또는 링커 오류를 게시하여 컴파일 또는 링크 문제인지 확인할 수 있습니다. –
ifdef가 당신을 괴롭 히고 있습니까? ** _ UNICODE **로 프로그램을 컴파일한다면 대신에'_wpopen'을 사용해야합니다. – kiwixz