[common-sln]: base工程初步功能

博主在2013年5月18日至25日期间完成了基础库common-v1.0的初步开发,包含网络字节流压缩算法和日志模块。网络字节流部分有创新性的整数压缩算法,日志模块设计合理,接口友好。由于个人原因,如心情和健康问题,后续计划的信号量、同步队列封装等工作暂未进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从2013-05-18 pm 到 2013-05-25 am, 终于完成了基础库的第一个版本:


我的基础库: common-v1.0
common目录下有目录:

bulid:    Makefile和编译生成的objs文件所在的目录
inc:      头文件目录,下一级是工程目录,此工程目录下包含了所有的头文件 
src:      实现文件目录,下一级是工程目录,此工程目录下包含了所有的实现文件 
lib:      包含linux和windows, windows下包含debug和release,目录包含编译生成的动态库等文件 
sln:      包含项目和工程目录 (暂时只有base工程) 
release:  包含应用、测试程序需要用到的文件: inc包含头文件,lib包含动态库之类,还有更新日志文件 
test:     包含所有的测试工程 (暂时只有base工程的测试工程),里面几乎有所有接口的测试代码

目前所含功能:

1. base_namespace.h:       命名空间的定义文件 
2. base_export.h:          动态库导出宏的定义文件 
3. base_common.h:          常用头文件集合: 
                           base_namespace.h, base_export.h, base_macro.h 
4. base_macro.h:           一些简单宏 
5. base_io.h:              标准IO的简单封装宏 
6. base_memory.h:          new、new[]、delete、delete[]的简单封装宏 
7. base_uncopy.h:          不可拷贝类的基类 
8. base_exception.h:       简单异常类, 及抛出此异常的宏BASE_THROW() 
9. base_string.h:          snprintf等函数的跨平台封装: base_snprintf, base_vsnprintf 
10. base_hex.h:            十六进制格式编解码(转换) 
11. base_base64.h:         Base64编解码 
12. base_time.h:           时间相关的函数的封装 
13. base_locker.h:         简单的线程锁、进程锁、空锁(什么也不做) 
14. base_guard.h:          资源守卫, 构造时获取资源, 析构时释放资源 
15. base_thread.h:         线程对象 
16. base_object_pool.hpp:  简单的对象池类模板 (第二个模板参数为内部锁类型, 默认为空锁) 
17. base_byte_stream.h:    网络字节流实现, IBStream输入流, OBStream输出流 
18. base_log_types.h:      日志模块配置类型 
19. base_log.h:            日志模块的初始化、销毁函数, 及一些日志操作宏

未列出的为被间接引用的头文件

个人感觉至少有两处值得一看的地方: 1. 网络字节流(整数压缩的算法, 微创新); 2. 日志模块(结构与接口)

 

完成日志模块后, 就不想动了, 信号量、同步的队列什么的理应封装下的, 但最近心情实在不行, 投了两天简历也没个反应, 而且来深圳的第二周居然皮肤过敏......

 

等一切好起来再说吧

<think>好的,我现在需要帮助用户解决Visual Studio 2022中的链接错误C1047和LNK1257。首先,我得仔细分析用户提供的信息和引用内容。用户提到使用不同编译器版本构建时出现问题,还提到了base.lib、CrashReportImpl.obj以及QT和MSBuild相关的内容。 首先,引用[1]中的错误LNK2019是关于未解析的外部符号_main,这可能是因为入口点设置错误或者缺少main函数。但用户现在的错误是C1047和LNK1257,需要分开处理。C1047通常指对象文件或库由不同版本的编译器生成,导致不兼容。LNK1257则涉及代码生成失败,可能由于混合了不同编译器版本的库或对象文件。 接下来,引用[2]提到环境变量LIB的问题,特别是kernel32.lib路径未包含。这可能与链接器找不到库有关,但用户的具体错误不同,可能需要检查其他库的路径或版本兼容性。 用户的问题涉及不同编译器版本,这可能是关键。Visual Studio 2022如果使用较新的工具链,而项目中的某些库(如base.lib)可能是用旧版本编译的,会导致不兼容。需要确保所有依赖项都用同一版本的编译器重新编译。 此外,QT项目可能需要特定版本的MSBuild或编译器工具集。如果用户混合了不同版本的QT模块,也可能导致链接错误。需要检查QT的配置是否正确,是否与当前VS2022项目兼容。 可能的解决步骤包括:清理解决方案,确保所有依赖项使用相同编译器版本重新编译,检查项目设置中的平台工具集,确认库路径正确,更新QT插件或模块,以及检查代码生成设置是否一致。此外,查看详细生成日志可以帮助定位具体出错的模块或库,从而针对性解决。</think>分步解决Visual Studio 2022链接错误C1047和LNK1257: 1. **编译器版本一致性检查** - 确认所有第三方库(如base.lib)均使用VS2022重新编译 - 检查项目属性 > 常规 > 平台工具集是否为"Visual Studio 2022 (v143)" - 特别关注QT模块是否使用匹配的MSVC版本编译 2. **代码生成设置验证** ```xml <!-- .vcxproj文件中需保持一致的配置 --> <PropertyGroup> <ConfigurationType>DynamicLibrary</ConfigurationType> <PlatformToolset>v143</PlatformToolset> <PreferredToolArchitecture>x64</PreferredToolArchitecture> </PropertyGroup> ``` 若存在混合配置(如部分文件使用`/MT`而其他使用`/MD`),会导致LNK1257错误[^1] 3. **环境配置修复** - 检查LIB环境变量包含最新Windows SDK路径: ```bat :: 标准路径示例 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64 ``` - 对于QT项目,确认qmake生成的.vcxproj文件包含正确的库目录: ```pro # QT项目文件需包含 CONFIG += c++17 MSVCRT_LINKER_FLAGS = /NODEFAULTLIB:LIBCMT ``` 4. **增量编译问题处理** - 执行完整清理: ```powershell devenv.exe YourSolution.sln /Clean "Release|x64" ``` - 删除中间文件目录`Intermediate`和输出目录`Binaries` 5. **特定错误处理** - 对于C1047错误,使用dumpbin工具检查对象文件版本: ```cmd dumpbin /HEADERS CrashReportImpl.obj | findstr "machine" ``` 应显示x64和14.3X版本号 6. **混合编译环境验证** - 在开发者命令提示符执行: ```cmd cl /Bv CrashReportImpl.cpp ``` - 对比输出中的编译器版本与链接器调用的版本是否一致 **相关问题** 1. 如何检测VS项目中混合使用的编译器版本? 2. 不同Windows SDK版本共存时如何指定路径? 3. QT项目如何强制使用特定MSVC工具集? : 错误C1047表明对象文件或库使用不同编译器生成,需统一编译环境 [^2]: 库路径问题可能导致链接器无法解析符号,需检查SDK安装路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值