chdir未声明,编译错误g++。

4

我正在尝试编译一个相对简单的从网络上获取的应用程序。

运行make时,我遇到了以下错误:

In file included from main.cpp:2:0:
os.h: In function ‘void myOpenDir(const char*)’:
os.h:13:16: error: ‘chdir’ was not declared in this scope

文件os.h的内容如下:
#ifndef OS_H
#define OS_H


#if defined(__GNUG__)

#define INT64 long long
#define UINT64 unsigned long long
#include <dirent.h>
#define SPRTR '/'
void myOpenDir(const char* dirpath)
{
    chdir(dirpath);
}

#elif defined(_MSC_VER)
    #define INT64 __int64
    #define UINT64 unsigned __int64
    #include <direct.h>
    #define SPRTR '\\'
    void myOpenDir(const char* dirpath)
    {
        _chdir(dirpath);
    }
        #else
        #error "Platform not supported. Need to update source code"
        #endif 
#endif

有人知道为什么它无法编译吗?

我也使用了g++编译器,通过g++-4.7.real -c main.cpp,但到目前为止没有成功。


你在哪个操作系统上编译(以及为哪个目标)?你应该养成使用 g++-4.7 -Wall -g 进行编译的习惯。 - Basile Starynkevitch
1个回答

11

1
太棒了,谢谢!我会看看这个在其他应用程序中是否也适用。8分钟后,我会给你两个赞并检查你的答案。 - Jasper
确实,BCI2000也有同样的问题和解决方案,但并未在其维基上记录:http://www.bci2000.org/wiki/index.php/Programming_Howto:Quickstart_Guide#Prerequisites_.28Linux.29。非常好的答案。 - bright-star
我曾尝试过使用条件加载 `#ifdef _WIN32 #include <windows.h> #define chdir _chdir#else #include <unistd.h> #endif`,但最终不得不将它们都加上才能正常工作。我从未想到mingw可以创建真正的跨平台二进制文件。 - m3nda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接