2012-11-12 179 views
1

我試圖編譯我從網上獲得一個相對簡單的應用程序..CHDIR未聲明,編譯錯誤G ++

當運行使我得到以下錯誤:

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中,但到目前爲止沒有運氣。

+0

你正在編譯哪個操作系統(以及哪個目標)?你應該習慣用'g ++ - 4.7 -Wall -g'編譯 –

回答

6

添加#include <unistd.h>,按the chdir manual

+1

非常感謝!我會看看這是否也適用於其他應用程序。在8分鐘內,我會給你2個大拇指,並檢查你的答案。 – Jasper

+0

事實上,BCI2000具有相同的解決方案,在他們的維基沒有記錄同一個問題:http://www.bci2000.org/wiki/index.php/Programming_Howto:Quickstart_Guide#Prerequisites_.28Linux.29偉大的答案。 –

+0

我打過有條件的負載' 的#ifdef _WIN32 的#include 的#define CHDIR _chdir 的#else 的#include #endif'但最後我已經被迫給他們的同時添加和合作。 我從來沒有看過mingw創建真正跨平臺的binarys。 – erm3nda