opengl - assimp cmake mingw-w64 VSCode win10
问题描述
更新ToDo
:assimp 的开发者已经确认了这个错误,并计划在Planning for Release V5.1
5 月 26 日通过添加这个来修复它。
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 引用”错误。
- 我将 .dll 放在 exe 路径中,将 .a 文件放在 lib 路径中,将所有 assimp .h 文件放在包含路径中。
- VSCode 似乎不支持文件名“libassimp.dll.a”,我必须将其重命名为 libassimpdll.a 并在 tasks.json 中写入“-lassimp”。但是存在“未定义的引用”错误。
- 我尝试将 assimp 构建到 VS2017,我可以获得 dll 和 lib。
- 我试图直接链接assimp 3.1.1(已经正式提供了x86/x64 dll和lib)但也失败了。
所以我的问题是,是否有人成功地使用 cmake 和 mingw-w64 构建 assimp 并将其链接到 VSCode Win10 的项目中?
解决方案
我可以使用以下命令构建 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
甚至在-DBUILD_SHARED_LIBS:BOOL=ON
MSYS2 shell 下也是如此。
但它不起作用-DASSIMP_BUILD_ASSIMP_TOOLS:BOOL=ON
。
推荐阅读
- postgresql - 如何在没有主键的 PostgreSQL 表中删除 100% 重复的行?
- powerbi - 由链接日期表中的值显示的事实表中的运行总计
- php - “试图获取非对象的属性”错误
- c - 如何检测为什么没有得到任何输出
- reactjs - 如何在 Redux 中对 HTTP 请求执行异常处理
- php - 使用 INSERT INTO...SELECT 和 ON DUPLICATE UPDATE 的 SQL 查询(codeigniter 3.x)
- excel - 如何在循环更改时更改范围 - 运行时错误“1004”:应用程序定义或对象定义错误
- javascript - Angular - 如何防止 RxJs fromEvent 中的 XSS 攻击?
- javascript - 了解 ArcGIS SymbolStyler Widget 的代码流程
- node.js - Heroku Node 应用程序推送 - 不知从何而来的错误