netease-im / NIM_Duilib_Framework

网易云信Windows应用开发框架。
MIT License
2.1k stars 835 forks source link

使用develop分支升级cef版本至109解决完接口升级等问题最后生成cef工程的debug和release版本都提示错误,该如何处理 #512

Closed cwcwcw721 closed 1 month ago

cwcwcw721 commented 1 month ago

生成开始于 19:18... 1>------ 已启动生成: 项目: cef, 配置: Debug x64 ------ 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_is_cert_status_error,函数 "bool cdecl CefIsCertStatusError(enum cef_cert_status_t)" (?CefIsCertStatusError@@YA_NW4cef_cert_status_t@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_crash_reporting_enabled,函数 "bool cdecl CefCrashReportingEnabled(void)" (?CefCrashReportingEnabled@@YA_NXZ) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_set_crash_key_value,函数 "void cdecl CefSetCrashKeyValue(class CefStringBase const &,class CefStringBase const &)" (?CefSetCrashKeyValue@@YAXAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@0@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_create_directory,函数 "bool cdecl CefCreateDirectory(class CefStringBase const &)" (?CefCreateDirectory@@YA_NAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_get_temp_directory,函数 "bool cdecl CefGetTempDirectory(class CefStringBase &)" (?CefGetTempDirectory@@YA_NAEAV?$CefStringBase@UCefStringTraitsUTF16@@@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_create_new_temp_directory,函数 "bool cdecl CefCreateNewTempDirectory(class CefStringBase const &,class CefStringBase &)" (?CefCreateNewTempDirectory@@YA_NAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@AEAV1@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_create_temp_directory_in_directory,函数 "bool cdecl CefCreateTempDirectoryInDirectory(class CefStringBase const &,class CefStringBase const &,class CefStringBase &)" (?CefCreateTempDirectoryInDirectory@@YA_NAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@0AEAV1@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_directory_exists,函数 "bool cdecl CefDirectoryExists(class CefStringBase const &)" (?CefDirectoryExists@@YA_NAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_delete_file,函数 "bool cdecl CefDeleteFile(class CefStringBase const &,bool)" (?CefDeleteFile@@YA_NAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@_N@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_zip_directory,函数 "bool cdecl CefZipDirectory(class CefStringBase const &,class CefStringBase const &,bool)" (?CefZipDirectory@@YA_NAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@0_N@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_load_crlsets_file,函数 "void cdecl CefLoadCRLSetsFile(class CefStringBase const &)" (?CefLoadCRLSetsFile@@YAXAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_is_rtl,函数 "bool cdecl CefIsRTL(void)" (?CefIsRTL@@YA_NXZ) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_resolve_url,函数 "bool cdecl CefResolveURL(class CefStringBase const &,class CefStringBase const &,class CefStringBase &)" (?CefResolveURL@@YA_NAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@0AEAV1@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_parse_json_buffer,函数 "class scoped_refptr cdecl CefParseJSON(void const ,unsigned int64,enum cef_json_parser_options_t)" (?CefParseJSON@@YA?AV?$scoped_refptr@VCefValue@@@@PEBX_KW4cef_json_parser_options_t@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_execute_java_script_with_user_gesture_for_tests,函数 "void cdecl CefExecuteJavaScriptWithUserGestureForTests(class scoped_refptr,class CefStringBase const &)" (?CefExecuteJavaScriptWithUserGestureForTests@@YAXV?$scoped_refptr@VCefFrame@@@@AEBV?$CefStringBase@UCefStringTraitsUTF16@@@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(libcef_dll_wrapper.obj) : error LNK2019: 无法解析的外部符号 cef_set_data_directory_for_tests,函数 "void cdecl CefSetDataDirectoryForTests(class CefStringBase const &)" (?CefSetDataDirectoryForTests@@YAXAEBV?$CefStringBase@UCefStringTraitsUTF16@@@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(v8value_ctocpp.obj) : error LNK2019: 无法解析的外部符号 cef_v8value_create_array_buffer,函数 "public: static class scoped_refptr cdecl CefV8Value::CreateArrayBuffer(void ,unsigned int64,class scoped_refptr)" (?CreateArrayBuffer@CefV8Value@@SA?AV?$scoped_refptr@VCefV8Value@@@@PEAX_KV?$scoped_refptr@VCefV8ArrayBufferReleaseCallback@@@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(v8value_ctocpp.obj) : error LNK2019: 无法解析的外部符号 cef_v8value_create_promise,函数 "public: static class scoped_refptr cdecl CefV8Value::CreatePromise(void)" (?CreatePromise@CefV8Value@@SA?AV?$scoped_refptr@VCefV8Value@@@@XZ) 中引用了该符号 1>libcef_dll_wrapper_d.lib(request_context_ctocpp.obj) : error LNK2019: 无法解析的外部符号 cef_create_context_shared,函数 "public: static class scoped_refptr cdecl CefRequestContext::CreateContext(class scoped_refptr,class scoped_refptr)" (?CreateContext@CefRequestContext@@SA?AV?$scoped_refptr@VCefRequestContext@@@@V2@V?$scoped_refptr@VCefRequestContextHandler@@@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(image_ctocpp.obj) : error LNK2019: 无法解析的外部符号 cef_image_create,函数 "public: static class scoped_refptr __cdecl CefImage::CreateImage(void)" (?CreateImage@CefImage@@SA?AV?$scoped_refptr@VCefImage@@@@XZ) 中引用了该符号 1>libcef_dll_wrapper_d.lib(media_router_ctocpp.obj) : error LNK2019: 无法解析的外部符号 cef_media_router_get_global,函数 "public: static class scoped_refptr cdecl CefMediaRouter::GetGlobalMediaRouter(class scoped_refptr)" (?GetGlobalMediaRouter@CefMediaRouter@@SA?AV?$scoped_refptr@VCefMediaRouter@@@@V?$scoped_refptr@VCefCompletionCallback@@@@@Z) 中引用了该符号 1>libcef_dll_wrapper_d.lib(menu_model_ctocpp.obj) : error LNK2019: 无法解析的外部符号 cef_menu_model_create,函数 "public: static class scoped_refptr __cdecl CefMenuModel::CreateMenuModel(class scoped_refptr)" (?CreateMenuModel@CefMenuModel@@SA?AV?$scoped_refptr@VCefMenuModel@@@@V?$scoped_refptr@VCefMenuModelDelegate@@@@@Z) 中引用了该符号 1>....\bin\cef64_d.exe : fatal error LNK1120: 22 个无法解析的外部命令 1>已完成生成项目“cef.vcxproj”的操作 - 失败。 ========== 生成: 0 成功,1 失败,4 最新,0 已跳过 ========== ========== 生成 于 19:18 完成,耗时 00.724 秒 ==========

release生成提示一样

生成开始于 19:21... 1>------ 已启动生成: 项目: cef, 配置: Release x64 ------ 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_is_cert_status_error 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_crash_reporting_enabled 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_set_crash_key_value 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_create_directory 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_get_temp_directory 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_create_new_temp_directory 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_create_temp_directory_in_directory 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_directory_exists 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_delete_file 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_zip_directory 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_load_crlsets_file 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_is_rtl 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_resolve_url 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_parse_json_buffer 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_execute_java_script_with_user_gesture_for_tests 1>libcef_dll_wrapper.lib(libcef_dll_wrapper.obj) : error LNK2001: 无法解析的外部符号 cef_set_data_directory_for_tests 1>libcef_dll_wrapper.lib(v8value_ctocpp.obj) : error LNK2001: 无法解析的外部符号 cef_v8value_create_array_buffer 1>libcef_dll_wrapper.lib(v8value_ctocpp.obj) : error LNK2001: 无法解析的外部符号 cef_v8value_create_promise 1>libcef_dll_wrapper.lib(request_context_ctocpp.obj) : error LNK2001: 无法解析的外部符号 cef_create_context_shared 1>libcef_dll_wrapper.lib(image_ctocpp.obj) : error LNK2001: 无法解析的外部符号 cef_image_create 1>libcef_dll_wrapper.lib(media_router_ctocpp.obj) : error LNK2001: 无法解析的外部符号 cef_media_router_get_global 1>libcef_dll_wrapper.lib(menu_model_ctocpp.obj) : error LNK2001: 无法解析的外部符号 cef_menu_model_create 1>....\bin\cef64.exe : fatal error LNK1120: 22 个无法解析的外部命令 1>已完成生成项目“cef.vcxproj”的操作 - 失败。 ========== 生成: 0 成功,1 失败,4 最新,0 已跳过 ========== ========== 生成 于 19:21 完成,耗时 00.819 秒 ==========

nmgwddj commented 1 month ago

看样子是你未正确链接 libcef.lib 库文件,在 duilib 工程中修改过原始 libcef.lib 文件名为 nim_libcef.lib,请确认链接的库名称是否修正为正确的名称。

cwcwcw721 commented 1 month ago

看样子是你未正确链接 libcef.lib 库文件,在 duilib 工程中修改过原始 libcef.lib 文件名为 nim_libcef.lib,请确认链接的库名称是否修正为正确的名称。

感谢回复,我就在ui_components项目属性有看到附加依赖项有nim_libcef.lib相关静态库,是修改该依赖项吗?改成libcef.lib吗?还有我看到代码有个SUPPORT宏,如果需要使用官方cef版本需要加入该宏吗?

nmgwddj commented 1 month ago

看样子是你未正确链接 libcef.lib 库文件,在 duilib 工程中修改过原始 libcef.lib 文件名为 nim_libcef.lib,请确认链接的库名称是否修正为正确的名称。

感谢回复,我就在ui_components项目属性有看到附加依赖项有nim_libcef.lib相关静态库,是修改该依赖项吗?改成libcef.lib吗?还有我看到代码有个SUPPORT宏,如果需要使用官方cef版本需要加入该宏吗?

是的,修正该链接库的名字即可,您说的 SUPPORT 宏我不确定具体指哪个宏,您可以参考搜索一下代码中是否有针对该宏的特殊逻辑。

cwcwcw721 commented 1 month ago

看样子是你未正确链接 libcef.lib 库文件,在 duilib 工程中修改过原始 libcef.lib 文件名为 nim_libcef.lib,请确认链接的库名称是否修正为正确的名称。

感谢回复,我就在ui_components项目属性有看到附加依赖项有nim_libcef.lib相关静态库,是修改该依赖项吗?改成libcef.lib吗?还有我看到代码有个SUPPORT宏,如果需要使用官方cef版本需要加入该宏吗?

是的,修正该链接库的名字即可,您说的 SUPPORT 宏我不确定具体指哪个宏,您可以参考搜索一下代码中是否有针对该宏的特殊逻辑。

感谢,cef工程跑起来了。但是编译multi_browser的时候也替换了libcef.dll和对应的lib库,在编译multi_browser的时候提示去找libcef.dll.pdb我是从https://cef-builds.spotifycdn.com/index.html#windows64:109下载的官方的cef库。 顺带问一嘴,配置的debug和debug_142和对应的release的 142有啥区别吗

nmgwddj commented 1 month ago

看样子是你未正确链接 libcef.lib 库文件,在 duilib 工程中修改过原始 libcef.lib 文件名为 nim_libcef.lib,请确认链接的库名称是否修正为正确的名称。

感谢回复,我就在ui_components项目属性有看到附加依赖项有nim_libcef.lib相关静态库,是修改该依赖项吗?改成libcef.lib吗?还有我看到代码有个SUPPORT宏,如果需要使用官方cef版本需要加入该宏吗?

是的,修正该链接库的名字即可,您说的 SUPPORT 宏我不确定具体指哪个宏,您可以参考搜索一下代码中是否有针对该宏的特殊逻辑。

感谢,cef工程跑起来了。但是编译multi_browser的时候也替换了libcef.dll和对应的lib库,在编译multi_browser的时候提示去找libcef.dll.pdb我是从https://cef-builds.spotifycdn.com/index.html#windows64:109下载的官方的cef库。 顺带问一嘴,配置的debug和debug_142和对应的release的 142有啥区别吗

寻找 pdb 的警告可以忽略,这个只是没有找到 libcef.dll 的 pdb 文件,与 lib 无关。

libcef 导出的是纯 C 接口,debug 和 debug 142 关系不大,但是 cef wrapper 要保持 VS 编译的版本一致,否则可能出现 ABI 兼容类链接错误。

cwcwcw721 commented 1 month ago

看样子是你未正确链接 libcef.lib 库文件,在 duilib 工程中修改过原始 libcef.lib 文件名为 nim_libcef.lib,请确认链接的库名称是否修正为正确的名称。

感谢回复,我就在ui_components项目属性有看到附加依赖项有nim_libcef.lib相关静态库,是修改该依赖项吗?改成libcef.lib吗?还有我看到代码有个SUPPORT宏,如果需要使用官方cef版本需要加入该宏吗?

是的,修正该链接库的名字即可,您说的 SUPPORT 宏我不确定具体指哪个宏,您可以参考搜索一下代码中是否有针对该宏的特殊逻辑。

感谢,cef工程跑起来了。但是编译multi_browser的时候也替换了libcef.dll和对应的lib库,在编译multi_browser的时候提示去找libcef.dll.pdb我是从https://cef-builds.spotifycdn.com/index.html#windows64:109下载的官方的cef库。 顺带问一嘴,配置的debug和debug_142和对应的release的 142有啥区别吗

寻找 pdb 的警告可以忽略,这个只是没有找到 libcef.dll 的 pdb 文件,与 lib 无关。

libcef 导出的是纯 C 接口,debug 和 debug 142 关系不大,但是 cef wrapper 要保持 VS 编译的版本一致,否则可能出现 ABI 兼容类链接错误。

尝试了再项目属性也忽略pdb警告,还是不行。前面说的有有点问题,其实是exe已经生成成功了,但是运行的时候会尝试去找libcef.dll.pdb,我手动指定了pdb的话又会去找源文件。release生成之后双击打开能看到界面然后就闪退了。 微信图片_20241025163036 微信图片_20241025163350 微信图片_20241025163454 微信图片_20241025164532

cwcwcw721 commented 1 month ago

// 初始化 CEF CefSettings settings; if (!nim_comp::CefManager::GetInstance()->Initialize(nbase::win32::GetCurrentModuleDirectory() + L"cef_temp\", settings, true))

看了其实升级是成功了。其实是使用离屏渲染导致的。如果关了是能跑起来的。

cwcwcw721 commented 1 month ago

// 初始化 CEF CefSettings settings; if (!nim_comp::CefManager::GetInstance()->Initialize(nbase::win32::GetCurrentModuleDirectory() + L"cef_temp\", settings, true))

看了其实升级是成功了。其实是使用离屏渲染导致的。如果关了是能跑起来的。

@nmgwddj 升级cef后有遇到这种情况有遇到吗?没有自己编译cef没法调试,如果没遇到的话我过会再来关issue

nmgwddj commented 1 month ago

// 初始化 CEF CefSettings settings; if (!nim_comp::CefManager::GetInstance()->Initialize(nbase::win32::GetCurrentModuleDirectory() + L"cef_temp", settings, true)) 看了其实升级是成功了。其实是使用离屏渲染导致的。如果关了是能跑起来的。

@nmgwddj 升级cef后有遇到这种情况有遇到吗?没有自己编译cef没法调试,如果没遇到的话我过会再来关issue

这块我给不了你太多的建议,升级 CEF 后我们均推荐使用真窗口模式,你的这种情况可能是渲染进程在运行时崩溃了。但更详细的信息我没法通过截图给到您。

cwcwcw721 commented 1 month ago

// 初始化 CEF CefSettings settings; if (!nim_comp::CefManager::GetInstance()->Initialize(nbase::win32::GetCurrentModuleDirectory() + L"cef_temp", settings, true)) 看了其实升级是成功了。其实是使用离屏渲染导致的。如果关了是能跑起来的。

@nmgwddj 升级cef后有遇到这种情况有遇到吗?没有自己编译cef没法调试,如果没遇到的话我过会再来关issue

这块我给不了你太多的建议,升级 CEF 后我们均推荐使用真窗口模式,你的这种情况可能是渲染进程在运行时崩溃了。但更详细的信息我没法通过截图给到您。

好的。谢谢!测试程序mulit_browser默认用的就是离屏渲染。我先改回真窗口模式了。