diff --git a/vcpkg安装库错误及解决方法.md b/vcpkg安装库错误及解决方法.md index 33000f0..b5e601f 100644 --- a/vcpkg安装库错误及解决方法.md +++ b/vcpkg安装库错误及解决方法.md @@ -1,53 +1,68 @@ -### 控制台设置代理 -set HTTP_PROXY=http://127.0.0.1:2801 -set HTTPS_PROXY=http://127.0.0.1:2801 +# vcpkg安装库失败常见错误及其解决方法 -set OSGEARTH_HTTP_DEBUG=1 -set OSG_CURL_PROXY="127.0.0.1" -set OSG_CURL_PROXYPORT=2801 +## 1. 科学上网 -### 遇到某些库编译错误时,在本地修改代码并使用修改后的代码编译 -`正常使用vcpkg install xxxx安装库时,出现编译错误,通过编译日志可以定位到具体的编译错误,但是默认情况下每次install时,都会从压缩包中重新解压一份新的代码到本地临时目录,因此无法对源代码进行修改并使用修复后的代码进行编译安装,此时,只需要在install时,额外指定--editable选项,即可使本次编译不生成临时源码目录(在一个固定的源码目录中),然后可手工编辑修改此目录中源代码,然后再使用install(此时仍需指定--editable选项)安装,这时,就会使用修改后的代码进行编译了...` +vcpkg中大部份依赖均托管在github仓库中,由于国内特殊的网络环境,导致github大部分时间无法正常访问,尤其是下载较大源码包或文件时会出现网络错误,此时需要通过科学上网措施(目前统一使用Mielink)建立代理上网,建立代理后,一般会有一个本地代理端口,如果配置的不是全局代理,那么有时需要在控制台设定上网代理,下面介绍代理配置方法及一些网络相关的其它错误... + +### 1.1 控制台设置代理 + +控制台设置网络代理,需要将2801修改成本机的科学上网代理端口 + +* set HTTP_PROXY=http://127.0.0.1:2801 +* set HTTPS_PROXY=http://127.0.0.1:2801 + +### 1.2 vcpkg包下载失败 + +* 有时使用vcpkg安装指定库时,由于网络抽风,有时会出现无法成功下载某些源码包的情况,此时可先使用vcpkg安装一次,确认源码包的下载目录及保存的文件名(此二者有时不一致),然后使用以下方法下载压缩包,重命名后放在vcpkg的download目录中即可 +* 关于库下载错误,可以通过迅雷或其它工具下载,然后添加到download目录,注意从命令行确认保存的文件名 + +### 1.3 osg/osgEarth网络代理环境变量 + +* set OSGEARTH_HTTP_DEBUG=1 +* set OSG_CURL_PROXY="127.0.0.1" +* set OSG_CURL_PROXYPORT=2801 + +## 2. 遇到某些库编译错误时,在本地修改代码并使用修改后的代码编译 + +正常使用vcpkg install xxxx安装库时,出现编译错误,通过编译日志可以定位到具体的编译错误,但是默认情况下每次install时,都会从压缩包中重新解压一份新的代码到本地临时目录,因此无法对源代码进行修改并使用修复后的代码进行编译安装,此时,只需要在install时,额外指定--editable选项,即可使本次编译不生成临时源码目录(在一个固定的源码目录中),然后可手工编辑修改此目录中源代码,然后再使用install(此时仍需指定--editable选项)安装,这时,就会使用修改后的代码进行编译了... 通过prompt启动,然后进入vcpkg目录 VCPKG install 库名 --editable,可以在编译前修改库源码 -* vcpkg ports内可以修改库的配置,如工程目录,windows SDK版本,以及部分错 +## 3. vcpkg ports内可以修改库的配置,如工程目录,windows SDK版本,以及部分错 +## 4. 找不到Windows SDK库的错误修改:https://github.com/microsoft/vcpkg/issues/8288 -* 关于找不到Windows SDK库的错误修改:https://github.com/microsoft/vcpkg/issues/8288 +## 5. vc错误: `error MSB4115: 函数“exists”只接受标量值,但其参数“$(ForceImportBeforeCppTargets)”的计算结果为` -* 关于vc错误: -https://github.com/conan-io/conan/issues/7806 -1>节点 1 上的项目“C:\Users\gz\Desktop\vcpkg-2023.08.09\buildtrees\libpq\x64-windows-dbg\libpq.vcxproj”(默认目标)。 - 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Current.targets(14,11): error MSB4115: 函数“exists”只接受标量值,但其参数“$(ForceImportBeforeCppTargets)”的计算结果为“C:/Users/gz/Desktop/vcpkg-2023.08.09/scripts/buildsystems/msbuild/vcpkg.targets;C:/Users/gz/Desktop/vcpkg-2023.08.09/buildtrees/libpq/x64-windows-dbg/vcpkg-libs.props”,不是标量值。 [C:\Users\gz\Desktop\vcpkg-2023.08.09\buildtrees\libpq\x64-windows-dbg\libpq.vcxproj] - 1>已完成生成项目“C:\Users\gz\Desktop\vcpkg-2023.08.09\buildtrees\libpq\x64-windows-dbg\libpq.vcxproj”(默认目标)的操作 - 失败。 -============================================================================== -解决方案:修改对应库ports目录内的msvc.cmake文件 - /p:ForceImportBeforeCppTargets=\"${SCRIPTS}/buildsystems/msbuild/vcpkg.targets\" \ - /p:ForceImportBeforeCppTargets=\"${build_path}/vcpkg-libs.props\" \ +* 报错信息:1>节点 1 上的项目“xxxxxx\buildtrees\libpq\x64-windows-dbg\libpq.vcxproj”(默认目标)。 + 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Current.targets(14,11): error MSB4115: 函数“exists”只接受标量值,但其参数“$(ForceImportBeforeCppTargets)”的计算结果为“C:/Users/gz/Desktop/vcpkg-2023.08.09/scripts/buildsystems/msbuild/vcpkg.targets;C:/Users/gz/Desktop/vcpkg-2023.08.09/buildtrees/libpq/x64-windows-dbg/vcpkg-libs.props”,不是标量值。 [xxxxxx\buildtrees\libpq\x64-windows-dbg\libpq.vcxproj] + 1>已完成生成项目“xxxxxx\buildtrees\libpq\x64-windows-dbg\libpq.vcxproj”(默认目标)的操作 - 失败。 +* 参考链接:https://github.com/conan-io/conan/issues/7806 +* 解决方案: + > 修改对应库ports目录内的msvc.cmake文件 + > /p:ForceImportBeforeCppTargets=\"${SCRIPTS}/buildsystems/msbuild/vcpkg.targets\" + > + > /p:ForceImportBeforeCppTargets=\"${build_path}/vcpkg-libs.props\" +## 5. 编译GDAL 出现 +[](){}; 加号不明确 -**编译GDAL 出现 +[](){}; 加号不明确** -`C:\Users\gz\Desktop\vcpkg-2023.08.09\buildtrees\gdal\src\v3.7.1-30395dad39\ogr\ogrsf_frmts\openfilegdb\filegdbindex_write.cpp(1298): error C2593: “operator +”不明确 -C:\Users\gz\Desktop\vcpkg-2023.08.09\buildtrees\gdal\src\v3.7.1-30395dad39\ogr\ogrsf_frmts\openfilegdb\filegdbindex_write.cpp(1298): note: 可能是“内置 C++ operator+(void (__cdecl *)(std::vector> &,const __int64 &,int))” - with - [ - _Ty=GByte - ] -C:\Users\gz\Desktop\vcpkg-2023.08.09\buildtrees\gdal\src\v3.7.1-30395dad39\ogr\ogrsf_frmts\openfilegdb\filegdbindex_write.cpp(1298): note: 或 “内置 C++ operator+(void (__vectorcall *)(std::vector> &,const __int64 &,int))” - with - [ - _Ty=GByte - ] -C:\Users\gz\Desktop\vcpkg-2023.08.09\buildtrees\gdal\src\v3.7.1-30395dad39\ogr\ogrsf_frmts\openfilegdb\filegdbindex_write.cpp(1298): note: 尝试匹配参数列表“(OpenFileGDB::FileGDBTable::CreateSpatialIndex::)”时 -` -* 尝试去掉lambda前面的加号(该加号用于将lambda表达式转为传统函数指针,兼容老代码) +* 错误信息: + > xxxxxx\buildtrees\gdal\src\v3.7.1-30395dad39\ogr\ogrsf_frmts\openfilegdb\filegdbindex_write.cpp(1298): error C2593: “operator +”不明确 + > xxxxxx\buildtrees\gdal\src\v3.7.1-30395dad39\ogr\ogrsf_frmts\openfilegdb\filegdbindex_write.cpp(1298): note: 可能是“内置 C++ operator+(void (__cdecl *)(std::vector> &,const __int64 &,int))” + > with + > [ + > _Ty=GByte + > ] + > xxxxxx\buildtrees\gdal\src\v3.7.1-30395dad39\ogr\ogrsf_frmts\openfilegdb\filegdbindex_write.cpp(1298): note: 或 “内置 C++ operator+(void (__vectorcall *)(std::vector> &,const __int64 &,int))” + > with + > [ + > _Ty=GByte + > ] + > xxxxxx\buildtrees\gdal\src\v3.7.1-30395dad39\ogr\ogrsf_frmts\openfilegdb\filegdbindex_write.cpp(1298): note: 尝试匹配参数列表“(OpenFileGDB::FileGDBTable::CreateSpatialIndex::)”时 +* 原因分析:由于C++版本原因,低版本并不支持该转换,因此直接去掉转换即可 +* 解决方法:尝试去掉lambda前面的加号(该加号用于将lambda表达式转为传统函数指针,兼容老代码) -============================================================================== +## 6. Windows 7 Python 3.8 -**有时使用vcpkg安装指定库时,由于网络抽风,有时会出现无法成功下载某些源码包的情况,此时可先使用vcpkg安装一次,确认源码包的下载目录及保存的文件名(此二者有时不一致),然后使用以下方法下载压缩包,重命名后放在vcpkg的download目录中即可** -* 关于库下载错误,可以通过迅雷或其它工具下载,然后添加到download目录,注意从命令行确认保存的文件名 - - -// windows 7 Python 3.8 -所以如果用到库以来了Python3.8以上的版本,是无法在windows7正常运行的,解决办法是用3.8狸猫换太子,无痛替换掉vcpkg自动下载的python \ No newline at end of file +如果用到的库依赖了Python3.8以上的版本,是无法在windows7正常运行的,解决办法是用3.8狸猫换太子,无痛替换掉vcpkg自动下载的python +貌似打补丁也可以实现让windows7支持3.9.2运行 \ No newline at end of file