长春火车站到龙嘉机场动车时刻表,iis网站发布教程,开发app的公司挣钱吗,手机网站模板.目录
0.环境
1.问题简述
2.分析报错原因
3.解决方法
1#xff09;set() 相关语句
2#xff09;target_link_libraries() 相关语句
4.参考 0.环境 windows11 、 vs-code 、 qt 、 c、编译器为vs2019-x86_amd64 1.问题简述
项目编译release版本时会报错#xff1a;报错…目录
0.环境
1.问题简述
2.分析报错原因
3.解决方法
1set() 相关语句
2target_link_libraries() 相关语句
4.参考 0.环境 windows11 、 vs-code 、 qt 、 c、编译器为vs2019-x86_amd64 1.问题简述
项目编译release版本时会报错报错的库叫【logDll】
[build] main.obj : error LNK2019: 无法解析的外部符号 public: static class LogDll * __cdecl LogDll::Getlog4qt(void) (?Getlog4qtLogDllSAPEAV1XZ)函数 main 中引用了该符号 [D:\work\POCT-gitee\poct-packageAll\poct\build\qPCRAnalyser\qPCRAnalyser.vcxproj]
[build] main.obj : error LNK2019: 无法解析的外部符号 public: bool __cdecl LogDll::InitLog(class QString const ) (?InitLogLogDllQEAA_NAEBVQStringZ)函数 main 中引用了该符号 [D:\work\POCT-gitee\poct-packageAll\poct\build\qPCRAnalyser\qPCRAnalyser.vcxproj]
[build] main.obj : error LNK2019: 无法解析的外部符号 public: static void __cdecl LogDll::debug(class QString const ,char const *,int,class QString) (?debugLogDllSAXAEBVQStringPEBDHV2Z)函数 main 中引用了该符号 [D:\work\POCT-gitee\poct-packageAll\poct\build\qPCRAnalyser\qPCRAnalyser.vcxproj] 2.分析报错原因 由于缺少正确的库链接或者路径设置不正确所导致 3.解决方法 在对应的【CMakelists.txt】中加入对应的库链接代码 我一共加了两句对应的代码
1set() 相关语句
set(Log4Qt_LIBRARIES_DIR ${Log4Qt_LIBRARIES_DIR} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${config}) 在CMakeLists.txt文件中set命令用于设置一个变量的值。在这个特定的语句中Log4Qt_LIBRARIES_DIR变量被设置为${Log4Qt_LIBRARIES_DIR}和${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${config}的组合。${Log4Qt_LIBRARIES_DIR}是一个预定义的变量它的值是之前已经设置过的Log4Qt_LIBRARIES_DIR变量的值如果有的话。这种语法${variable_name}表示引用另一个变量的值。${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${config}是一个路径字符串的拼接其中CMAKE_LIBRARY_OUTPUT_DIRECTORY是CMake内置变量表示生成库文件的输出目录而${config}可能是一个用户定义的变量表示配置名称例如Debug、Release等。所以这个语句的作用是将${Log4Qt_LIBRARIES_DIR}的值与${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${config}拼接成一个新的路径并将结果保存在Log4Qt_LIBRARIES_DIR变量中。这样做的目的可能是为了设置一个特定配置下的库文件目录路径。通过设置Log4Qt_LIBRARIES_DIR变量的值可以在后续的构建过程中使用这个路径来链接或安装库文件。 2target_link_libraries() 相关语句
target_link_libraries(${PROJECT_NAME} PRIVATE debug logDll_d optimized debug logDll) 在CMakeLists.txt文件中target_link_libraries命令用于为目标target添加链接库。${PROJECT_NAME}是一个预定义的变量它保存了当前项目的名称。这个语句表示将名为logDll的库文件链接到${PROJECT_NAME}目标中。PUBLIC关键字表示将链接库作为target_link_libraries命令的一部分公开指定同时还将该链接库添加到${PROJECT_NAME}目标的接口中以便后续的目标可以链接此库。在链接过程中如果${PROJECT_NAME}目标使用了logDll库文件中的函数或变量那么该库文件就会被自动链接到${PROJECT_NAME}目标中从而使得${PROJECT_NAME}目标可以正常编译和运行。总之target_link_libraries(${PROJECT_NAME} PUBLIC logDll)的作用是将logDll库文件链接到当前项目中并使得该库文件对外可见以便其它依赖于该库的目标可以链接它。 添加之后报错解决我也是在网上找了很久没找到解决方式请教了项目组的大神后解决的特此分享
4.参考
微软官方给出的LNK2019的可能原因是 有多种方法会造成此错误。 所有这些方法都涉及引用链接器无法解析或无法查找其定义的函数或变量。 编译器可以识别未声明符号的情况但无法判断未定义符号的情况。 这是因为定义可能位于不同的源文件或库中。 如果引用了未定义的符号链接器会生成未解析的外部 (external) 符号错误。 也分析了一些导致 LNK2019 的常见问题具体详见链接 链接器工具错误 LNK2019 | Microsoft Learn --END--