cocos2d-x新项目在Xcode9.1编译时报错call to unavailable function 'system':not available on iOS
之前因为Xcode9.0模拟器卡爆的问题,我把Xcode回退了,所以没发现Cocos2dx新建项目在Xcode上编译会报错的问题。今天心血来潮建了个新项目,发现居然报错了。
我在网上找了很多方法例如需要将报错的代码AssetsManager.cpp的system(command.c_str()); 修改为:popen(command.c_str(), "r");之类的我都试了一下,都不行。当然也可能是我操作失误。
后来在官方的论坛上找到的解决办法拿来和大家分享一下。官方论坛解决方案
打开GitHub的链接之后,在Xcode的左下方搜索CCFileUtils.cpp文件一看发现和我的CCFileUtils.cpp文件有些地方有差别,所以我就搜索他新加的上一行,首先是搜索#include <dirent.h>,然后添加
#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
#include <ftw.h>
#endif
然后在bool FileUtils::createDirectory(const std::string& path)的大括号外面添加
namespace
{
#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
int rv = remove(fpath);
if (rv)
perror(fpath);
return rv;
}
#endif
}
找到下面一个紧挨着的方法
bool FileUtils::removeDirectory(const std::string& path)
在这个方法的开始部分添加
#if !defined(CC_TARGET_OS_TVOS)
#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
if (nftw(path.c_str(), unlink_cb, 64, FTW_DEPTH | FTW_PHYS) == -1)
return false;
else
return true;
#else
然后再到方法的结尾处添加
#endif // (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
#endif // !defined(CC_TARGET_OS_TVOS)
网友评论