将 libsndfile 与 vcpkg 和 运行 sf_open 静态链接时出错
Errors when statically linking libsndfile with vcpkg and running sf_open
下面是一些示例代码:
#include<sndfile.h>
int main() {
SNDFILE* sndfile; SF_INFO sfinfo; sndfile =
sf_open("", SFM_READ, &sfinfo); std::cout << "Hello, World!";
}
所以基本上我是从 vcpkg 静态 linking 它,我遵循了所有步骤,比如最后使用 :x64-windows-static,更改 visual studio设置和配置文件等等,但由于某种原因,我在静态编译和使用 sf_open.
时特别遇到这些错误
错误:
3 unresolved externals
unresolved external symbol __imp_PathCombineW referenced in function INT123_compat_catpath
unresolved external symbol __imp_PathIsRelativeW referenced in function wpath_need_elongation
unresolved external symbol __imp_PathIsUNCW referenced in function wlongpath
注意:是的,我知道 libsndfile 是在 LGPL 下获得许可的,所以我计划包含目标文件,因为这显然允许我静态 link 它。
这些是 windows api 中的函数。只需 Google 它们,msdn 帮助页面将告诉您需要哪个 windows 库 link。
例如 PathCombineW 有这个帮助页面:https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathcombinew in the Requirements 部分它告诉您需要 link 到 Shlwapi.lib
下面是一些示例代码:
#include<sndfile.h>
int main() { SNDFILE* sndfile; SF_INFO sfinfo; sndfile = sf_open("", SFM_READ, &sfinfo); std::cout << "Hello, World!"; }
所以基本上我是从 vcpkg 静态 linking 它,我遵循了所有步骤,比如最后使用 :x64-windows-static,更改 visual studio设置和配置文件等等,但由于某种原因,我在静态编译和使用 sf_open.
时特别遇到这些错误错误:
3 unresolved externals unresolved external symbol __imp_PathCombineW referenced in function INT123_compat_catpath unresolved external symbol __imp_PathIsRelativeW referenced in function wpath_need_elongation unresolved external symbol __imp_PathIsUNCW referenced in function wlongpath
注意:是的,我知道 libsndfile 是在 LGPL 下获得许可的,所以我计划包含目标文件,因为这显然允许我静态 link 它。
这些是 windows api 中的函数。只需 Google 它们,msdn 帮助页面将告诉您需要哪个 windows 库 link。
例如 PathCombineW 有这个帮助页面:https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathcombinew in the Requirements 部分它告诉您需要 link 到 Shlwapi.lib