【问题标题】:assimp cmake mingw-w64 VSCode win10assimp cmake mingw-w64 VSCode win10
【发布时间】:2020-05-09 06:38:35
【问题描述】:

更新:assimp 的开发人员已确认该错误并计划在 5 月 26 日将其添加到 Planning for Release V5.1 中的 ToDo 来修复它。

https://github.com/assimp/assimp/issues/3221


我正在尝试在 opengl 中使用 assimp,按照此处的构建说明:https://github.com/assimp/assimp/blob/master/Build.md 在以下环境下:

assimp 5.0.1    
cmake 3.17.2
mingw-w64 with gcc/g++ 8.1.0
VSCode in Win10

我在cmake-gui中试过,使用MinGW Makefile,可以在构建路径中获取makefile。

然后我尝试通过 mingw32-make 来制作它并在 69% 时停止

[ 67%] Linking CXX shared library libassimp.dll
[ 67%] Built target assimp
Scanning dependencies of target assimp_cmd
[ 67%] Building RC object tools/assimp_cmd/CMakeFiles/assimp_cmd.dir/assimp_cmd.rc.obj
[ 68%] Building CXX object tools/assimp_cmd/CMakeFiles/assimp_cmd.dir/CompareDump.cpp.obj
[ 68%] Building CXX object tools/assimp_cmd/CMakeFiles/assimp_cmd.dir/ImageExtractor.cpp.obj
[ 68%] Building CXX object tools/assimp_cmd/CMakeFiles/assimp_cmd.dir/Main.cpp.obj
[ 68%] Building CXX object tools/assimp_cmd/CMakeFiles/assimp_cmd.dir/WriteDumb.cpp.obj
[ 69%] Building CXX object tools/assimp_cmd/CMakeFiles/assimp_cmd.dir/Info.cpp.obj
[ 69%] Building CXX object tools/assimp_cmd/CMakeFiles/assimp_cmd.dir/Export.cpp.obj
[ 69%] Linking CXX executable assimp.exe
CMakeFiles\assimp_cmd.dir/objects.a(Main.cpp.obj):Main.cpp:(.text+0x8d): undefined reference to `Assimp::Importer::ValidateFlags(unsigned int) const'
CMakeFiles\assimp_cmd.dir/objects.a(Main.cpp.obj):Main.cpp:(.text+0xc4): undefined reference to `Assimp::Importer::ReadFile(char const*, unsigned int)'
CMakeFiles\assimp_cmd.dir/objects.a(Main.cpp.obj):Main.cpp:(.text+0x14e): undefined reference to `Assimp::DefaultLogger::create(char const*, Assimp::Logger::LogSeverity, unsigned int, Assimp::IOSystem*)'
CMakeFiles\assimp_cmd.dir/objects.a(Main.cpp.obj):Main.cpp:(.text+0x183): undefined reference to `Assimp::DefaultLogger::kill()'
CMakeFiles\assimp_cmd.dir/objects.a(Main.cpp.obj):Main.cpp:(.text+0x1b8): undefined reference to `Assimp::Importer::GetErrorString() const'
......
......
......
CMakeFiles\assimp_cmd.dir/objects.a(Export.cpp.obj):Export.cpp:(.text+0xf44): undefined reference to `Assimp::Exporter::GetExportFormatDescription(unsigned long long) const'
collect2.exe: error: ld returned 1 exit status
mingw32-make[2]: *** [tools\assimp_cmd\CMakeFiles\assimp_cmd.dir\build.make:197: tools/assimp_cmd/assimp.exe] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:297: tools/assimp_cmd/CMakeFiles/assimp_cmd.dir/all] Error 2
mingw32-make: *** [Makefile:149: all] Error 2

虽然我可以在构建目录中获得“libassimp.dll”和“libassimp.dll.a”,但我未能将它们链接到我的项目中。有很多“未定义的 xxxx 引用”错误。

  1. 我把.dll放在exe路径下,把.a文件放在lib路径下,把所有assimp .h文件放在include路径下。
  2. VSCode 似乎不支持文件名“libassimp.dll.a”,我必须将其重命名为 libassimpdll.a 并在 tasks.json 中写入“-lassimp”。但存在“未定义引用”错误。
  3. 我尝试将 assimp 构建到 VS2017,我可以获取 dll 和 lib。
  4. 我尝试直接链接 assimp 3.1.1(官方已经提供了 x86/x64 dll 和 lib)但也失败了。

所以我的问题是是否有人成功地使用 cmake 和 mingw-w64 构建 assimp 并将其链接到 VSCode Win10 的项目中?

【问题讨论】:

  • 我建议从不使用 VSCode 开始 - 移动部件越少,头痛就越少。 MSVC 和 GCC 的 C++ 对象和库不兼容。您能否在 CMake+GCC 构建中启用详细模式以查看实际执行的内容?
  • 我通过stackoverflow搜索了,主要领导说assimp似乎不支持由mingw-w64构建...

标签: opengl visual-studio-code windows-10 mingw-w64 assimp


【解决方案1】:

我能够构建 assimp 5.0.1:

cmake.exe -G"MSYS Makefiles" -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DASSIMP_BUILD_ASSIMP_TOOLS:BOOL=OFF -DASSIMP_HEADERCHECK:BOOL=OFF -DASSIMP_OPT_BUILD_PACKAGES:BOOL=OFF -DSYSTEM_IRRXML:BOOL=OFF -DASSIMP_BUILD_SAMPLES:BOOL=OFF -DBUILD_DOCS:BOOL=OFF -DASSIMP_BUILD_TESTS:BOOL=OFF -S. -Bbuild_win &&
make -Cbuild_win &&
echo Success

甚至在 MSYS2 shell 下与 -DBUILD_SHARED_LIBS:BOOL=ON 相同。

但它不适用于-DASSIMP_BUILD_ASSIMP_TOOLS:BOOL=ON

【讨论】:

  • 谢谢。但我已经放弃使用 mingw-w64 并转向 msvc 一段时间。可惜之前没有看到这个答案。 :-(
猜你喜欢
  • 2020-07-30
  • 1970-01-01
  • 2019-05-31
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2020-06-19
  • 1970-01-01
相关资源
最近更新 更多