WindowsでLinuxで書かれたプログラムをコンパイルしようとしています(mingwを使用しています)
void make_directory(const char* name) {
mkdir(name1, name2);
}
エラーがあります:
Too Many Arguments to function 'int mkdir(const char*)'
これを解決するアイデアはありますか?
Linuxで書かれたプログラムをmingw-w64でビルドする場合、私はこれでうまくいきました:
#if (defined(_WIN32) || defined(__WIN32__))
#define mkdir(A, B) mkdir(A)
#endif
コメントで述べたように、引数は1 つmkdir()
だけ取ります。ただし、この関数は非推奨であるため、代わりに次を使用する必要があります。 _mkdir()
int _mkdir(const char *dirname);
int _wmkdir(const wchar_t *dirname); /* for wide-character */
両方のシステム (linux / mingw) で機能が必要な場合:
void make_directory(const char* name)
{
#ifdef __linux__
mkdir(name, 777); /* Or what parameter you need here ... */
#else
_mkdir(name);
#endif
}
編集:
MinGW の実装:
_mkdir():
_CRTIMP int __cdecl __MINGW_NOTHROW _mkdir (const char*);
mkdir():
_CRTIMP int __cdecl __MINGW_NOTHROW mkdir (const char*);
どちらも で指定されていますが、代わりio.h
に含める方が良いと思います(その部分に含まれています)。direct.h
io.h
name1
とはどちらも、作成するディレクトリの名前であると想定しname2
ます (ただし、以下を参照してください)。
mkdir()
単一のディレクトリを作成 (または作成を試行) します。2 つのディレクトリを作成する場合は、mkdir()
2 回呼び出す必要があります。
さらに混乱を招くのは、POSIXmkdir()
関数は実際には2 つの引数を取りますが、2 番目の引数は名前ではありません。私のシステムのマニュアルページを引用する:
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
olloの_mkdir()
回答で言及されている関数は、Microsoft Windows に固有のものであり、単一の引数を取ります。モード、つまりパーミッションは、Windows では POSIX (Unix、Linux など) システムとは異なる働きをします。
しかし、あなたのコンパイラは明らかにmkdir()
引数が 1 つしかないと考えているので、なぜそう考えるのか不思議です。関数#include
の宣言を取得するためにどのヘッダーを使用しましたか?mkdir
上で述べたように、POSIXmkdir()
は 2 つの引数を取りますが、2 番目はmode_t
であり、名前ではありません。コードはもともと Linux 用に書かれたものだとおっしゃっています。引数は本当にname1
and と呼ばれてname2
いますか、または名前を変更してコードを単純化しようとしましたか? 質問を更新して、実際のコピー アンド ペーストされたコードを表示できますか?