私はちょうどこれと同じ問題が発生し、この質問が解決のために、Googleの検索中に思い付いたので、私はここに私の危険なソリューション文書化します:私はそれが複数にすることによってちょうど行くしまった最後に
をAssimpソースコードの小さな編集。文字列の問題を解決するだけでは、ビルドの後半で失敗するため、動作させるには不十分です。私は下で行った編集をリストアップします。私はそれらを一度に1つずつ作成してから再構築することをお勧めします。何らかの理由でセットアップが必要な場合は、そのうちのいくつかは必要ありません。リンクエラーを修正する別の方法を見つけ出す必要がある場合は、Exporter.cppへの最後の編集のために、このソリューションでモデルをエクスポートすることはできません。
これはクリーンな解決策ではなく、おそらく将来のバージョンのAssimpに置き換えられます。その時点で、私はそれを削除します。これはMinGWので構築された、assimp-3.3.1用です:
StringComparison.hで
、の#ifdefのelse
句以外のすべてをコメントアウト、ASSIMP_stricmp
機能を編集します。
/*#if (defined _MSC_VER)
return ::_stricmp(s1,s2);
#elif defined(__GNUC__)
return ::strcasecmp(s1,s2);
#else*/
char c1, c2;
do {
c1 = tolower(*s1++);
c2 = tolower(*s2++);
}
while (c1 && (c1 == c2));
return c1 - c2;
//#endif
は、同じようなことを行いますASSIMP_strincmp
にあります。
次に、::_fullpath
についてのエラーをDefaultIOSystem.cpp
にスローします。このための私の「修正」は、単に他のすべてのものをコメントアウトこの機能では、フォールバックオプションを使用していた:
ai_assert(in && _out);
// char* ret;
//#if defined(_MSC_VER) || defined(__MINGW32__)
// ret = ::_fullpath(_out, in, PATHLIMIT);
//#else
// use realpath
// ret = realpath(in, _out);
//#endif
// if(!ret) {
// preserve the input path, maybe someone else is able to fix
// the path before it is accessed (e.g. our file system filter)
// DefaultLogger::get()->warn("Invalid path: "+std::string(in));
strcpy(_out,in);
// }
また、snprintfのは、未定義であることについて文句を言います。 snprintfの前にアンダースコアを追加するには、次の#defineを変更するStringUtils.h
を編集します。
# define ai_snprintf _snprintf
atof定義されていないについて::エラーもあります。あなたは、私はほとんどすべて無効になっているので(これが原因私の特定のcmakeののsetttingsにあるかもしれない。これは、それが建物を取得する必要がありますがExporter.cpp
にリンクエラーが発生しますStringUtils.h
に
#include <cstdlib>
を追加することによってこの問題を解決することができますモデルフォーマット)。私はgExporters
の定義をコメントアウトし、これでそれを置き換えることによって、それを修正:
Exporter::ExportFormatEntry* gExporters = 0;
この後それが構築され、罰金走りました。ライブラリファイルはcode
フォルダに置かれます。あなたのlibビルドパスとlibassimpにlibassimp.dll.aを置きます。実行可能ファイルのパスにあるdll。
もちろん、VisualStudioを代わりに使ってもいいです(私はそれをインストールするのが面倒だったからではありませんでした)か、Linuxでビルドしていました(以前これを行いました。私はWindowsポートを行う必要があった)。
C関数。 – juanchopanza
あなたのコードに '#include'が含まれていますか? –
おそらく、これらの文字列関数を持つMysysヘッダーがあります。 mingw32環境には、これらのPOSIX関数がありません。 –