libgen.h の dirname を使用して、ファイル名のパスからディレクトリ パスを取得しています。
これは署名です:
char * dirname (char *path)
32 ビット マシンでコンパイルするか、gcc で -m32 を使用すると、すべて正常に動作します。
私のコードは次のようになります。
char* path = "/path/to/my/file.txt";
char* path_cpy = strdup(path);
const char* dir = (const char*)dirname(path_cpy);
64 ビット マシンでコンパイルすると、次の警告が表示されます。
"warning: cast to pointer from integer of different size"
これにより警告は修正されますが、実行時にクラッシュします。
const char* dir = (const char*)(uintptr_t)dirname(path_cpy);
以前に 32/64 ビット用にクロス コンパイルを試みたことはありません。これを修正する方法はありますか?