将 SOIL2 链接到 Visual Studio 项目时遇到问题

Trouble linking SOIL2 to Visual Studio project

提问人:Adrian Wheeler 提问时间:6/30/2021 更新时间:6/30/2021 访问量:325

问:

所以我下载了 SOIL2 和 premake5 的最新 src。我运行命令 premake5 vs2019 并构建静态库,它工作正常。然后,我转到我的项目属性,并执行两件事 - 1) 我将源文件包含在 C/C++>Genereral 下的“其他包含目录”部分中,以及 2) 我将 SOIL2 构建中的库文件添加到 Linker>Input>Additional Dependencies。

好的,既然我做了这两件事,我确保在我的主.cpp中使用 #include < SOIL2.h>(我也尝试过 #include“SOIL2.h”)。但是,当我尝试构建我的项目时,我在尝试调用此方法时出现编译错误 - SOIL_load_OGL_texture。错误显示

1>ld: error: undefined symbol: SOIL_load_OGL_texture
1>>>> referenced by Plane.cpp:49
1>>>>               x86\Debug\Plane.o:(Plane_setupGL(double, double))
1>>>> did you mean: _SOIL_load_OGL_texture
1>>>> defined in: C:\Users\------\source\repos\Sudoku\Linking\SOIL2\lib\soil2-debug.lib

好的,所以我尝试用这种方法来编译它(_SOIL_load_OGL_texture,同样的事情只是由于某种莫名其妙的原因在前面加了下划线......WTF??然后我得到这个编译错误-

1>Plane.cpp(49,12): error : use of undeclared identifier '_SOIL_load_OGL_texture'; did you mean 'SOIL_load_OGL_texture'?
1>        texture = _SOIL_load_OGL_texture("C:\\Users\\------\\source\\repos\\Sudoku\\Sudoku\\Sudoku.Android.Packaging\\Resources\\sudokuboard.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT);
1>                  ^~~~~~~~~~~~~~~~~~~~~~
1>                  SOIL_load_OGL_texture
1>C:\Users\------\source\repos\Sudoku\Linking\SOIL2\include\SOIL2.h(166,2): note: 'SOIL_load_OGL_texture' declared here
1>        SOIL_load_OGL_texture

跆拳道???我不知道这是怎么回事。顺便说一句,该项目是一个 android/ios opengl c++ 项目。

C++ OpenGL 土壤

评论

1赞 jwezorek 6/30/2021
第一个错误是链接器错误。第二个错误是编译器错误。编译器错误表示您包含的头文件中没有_SOIL_load_OGL_texture,您可以通过查看来验证。显然,如果没有下划线,它就在头文件中,否则没有下划线的构建将无法一直进行链接。为什么链接失败我不知道。我的猜测是你构建静态库的方式有问题。我也对“该项目是一个 android/ios opengl c++ 项目”感到困惑......如果您在 VS 中使用 .lib 等构建。
0赞 Adrian Wheeler 6/30/2021
这是我的项目类型——learn.microsoft.com/en-us/cpp/cross-platform/......
0赞 Adrian Wheeler 6/30/2021
所以更新,我在 x64 中重建了库并使用“clang”作为我的编译器,因为这是我的项目使用的,现在错误是“不是精灵文件”
0赞 jwezorek 6/30/2021
我的意思是我对在 VS 中构建跨平台移动应用程序一无所知(我什至不知道这是一回事),但您最初的链接器错误是试图链接到 .lib 文件,这显然是错误的。.lib 文件是 Windows 的东西。我相信,在 iOS 或 Android 上,这将是一个 .a 文件。iOS 和 Android 甚至兼容 ABI 吗?我不知道。
0赞 jwezorek 6/30/2021
所以基本上你需要谷歌“从 Visual Studio 中的 OpenGLES 应用程序项目链接到外部库”或类似的东西。否则,您可以将 SOIL2 的所有代码引入您的项目,并将其构建到您的可执行文件中,而不是尝试链接到它。或者直接使用 stb-image,而不使用包装器。

答: 暂无答案