将 libsndfile 与 vcpkg 静态链接并运行 sf_open 时出错

Errors when statically linking libsndfile with vcpkg and running sf_open

提问人:Olivia Smith 提问时间:4/21/2022 更新时间:4/22/2022 访问量:157

问:

下面是一些示例代码:

#include< sndfile.h>

int main() { SNDFILE* snd文件;SF_INFO sfinfo;sndfile = sf_open(“”, SFM_READ, &sfinfo);std::cout << “你好,世界!”; }

所以基本上我是从 vcpkg 静态链接它,我遵循了所有步骤,例如最后使用 :x64-windows-static、更改 Visual Studio 设置和配置文件等等,但由于某种原因,我特别在静态编译和使用 sf_open 时收到这些错误。

错误:

3 个未解决的外部问题 函数INT123_compat_catpath中引用的未解析的外部符号__imp_PathCombineW 函数wpath_need_elongation中引用__imp_PathIsRelativeW解析的外部符号 函数 wlongpath 中引用的未解析外部符号__imp_PathIsUNCW

注意:是的,我确实意识到libsndfile是在LGPL下许可的,所以我计划包含目标文件,因为这显然允许我静态链接它。

c++ 静态 链接器错误 libsndfile

评论

1赞 drescherjm 4/22/2022
这些看起来像 Windows API 中的函数。只需用谷歌搜索它们,msdn 帮助页面就会告诉您需要链接哪个 Windows 库。例如,PathCombineW 有这个帮助页面: https://learn.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathcombinew 在 Reauirements 部分,它告诉您需要链接到Shlwapi.lib
0赞 Michael Chourdakis 4/22/2022
更好的是,直接使用媒体基础。
0赞 Olivia Smith 4/22/2022
可悲的是,我不能直接使用媒体基础,因为我希望它是跨平台的。感谢您的推荐!

答:

1赞 drescherjm 4/22/2022 #1

这些是 Windows API 中的函数。只需用谷歌搜索它们,msdn 帮助页面就会告诉您需要链接哪个 Windows 库。

例如,PathCombineW 有这个帮助页面: https://learn.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathcombinew“要求”部分中,它告诉您需要链接到Shlwapi.lib

评论

0赞 Olivia Smith 4/22/2022
很抱歉回复晚了,但谢谢!它工作得很好!