vs2019编译7zip format7z

本文详细介绍了在VS2019环境下编译7zipformat7z的两种方法,包括去除Build.mak的只读属性、修改编译选项,以及针对不同步骤进行的Visual Studio设置,如设置命令行参数、代码生成模式和调试信息等。

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

vs2019编译7zip format7z

第一种方式

0x01. 进入7zsource\cpp目录 把Build.mak只读去掉
0x02. 把在第40行附近 LFLAGS = $(LFLAGS) -OPT:NOWIN98 后面的-OPT:NOWIN98去掉
0x03. 打开vs命令提示符工具 cd到7zsource\cpp\7zip目录
0x04. 执行 nmake NEW_COMPILER=1 MY_STATIC_LINK=1
0x05. 等待编译完成即可

第二种方式

0x01. 解压源码进入7zsource\cpp\7zip\Bundles\Format7zF 目录打开Format7z.dsw 期间会提示更新编译器 不用管
0x02. 对下图红框内4个asm文件设置命令行和输出 ps:不同vs filename宏不一样 自行查看宏路径 此处出错会报 找不到文件 .\Debug\\.obj 错误
图片1
0x03. 配置属性->常规 和 连接器->常规 输出文件路径需一致 图片2
0x04. 配置属性->C/C+±>代码生成:启用函数级链接 改为是
0x05. 配置属性->C/C+±>命令行 和 配置属性->连接器->命令行 添加/SAFESEH:NO 此处未设置会报错
0x06. 配置属性->C/C+±>常规:调试信息格式 改为程序数据库(/Zi)
0x07. 然后等待编译完成即可

<think>好的,我需要帮助用户解决在Visual Studio 2019中使用7z源码(版本24.09)编译x64时出现的LNK1104错误,具体是无法打开.obj文件的问题。首先,我得回忆一下LNK1104错误的常见原因,通常这类错误涉及文件路径、项目配置或依赖项的问题。 根据用户提供的引用[1],之前有人遇到类似链接错误,比如找不到strdup和unlink符号,这可能与库的链接设置有关。但用户现在的问题是找不到.obj文件,这可能是因为编译过程没有生成这些文件,或者项目设置指向了错误的路径。 首先,检查文件路径是否正确。用户提到使用Format7z.dsw,这是一个较旧的Visual Studio工作区文件,可能在VS2019中需要转换或正确导入。需要确认项目中的源文件路径是否存在,尤其是quant-a.asm这样的汇编文件,路径是否正确,是否存在空格或特殊字符导致的问题。引用[1]中提到的路径问题,比如e:\ma\h264\x264\common\i386\quant-a.asm,可能存在路径错误,用户需要检查类似的地方。 其次,检查项目配置。用户需要确认是否选择了正确的平台(x64),以及生成配置(Debug或Release)。有时候,旧项目转换后可能默认是Win32,需要手动改为x64。另外,custom build步骤是否正确设置,尤其是涉及到汇编文件的部分,可能需要指定正确的汇编器(如nasm)和参数。引用[1]中提到的custom build设置,用户需要检查这些设置是否正确,特别是生成.obj文件的输出路径。 第三,依赖项和库的链接。LNK1104还可能是因为链接器无法找到所需的.lib文件,但用户的问题是无法打开.obj文件,这可能是因为这些文件未被生成。需要检查编译日志,查看是否有编译错误导致.obj文件未生成。例如,汇编文件编译失败,就不会生成对应的.obj,导致链接器报错。此外,检查项目是否包含所有必要的源文件,尤其是.asm文件是否被正确包含在项目中,并且编译器能够处理它们。 另外,用户使用的是较新的7z源码(24.09),可能需要更新编译工具或调整项目设置以适应VS2019。旧版项目可能使用了不再支持的编译选项或工具集,需要将平台工具集设置为当前版本,比如Visual Studio 2019的v142工具集。同时,确认ASM文件的生成规则是否正确,可能需要手动指定生成自定义步骤,比如使用nasm进行汇编,并正确设置输出路径。 最后,清理解决方案并重新生成,有时候旧的中间文件可能导致问题。同时,检查输出目录是否有写入权限,避免权限问题导致无法生成.obj文件。如果项目中有第三方依赖库,确保它们的路径正确,并且在x64配置下可用。 总结可能的原因:路径错误、项目配置不正确(尤其是平台和工具集)、ASM文件编译失败、生成步骤设置错误、权限问题等。需要用户逐一排查这些方面,查看编译输出窗口的具体错误信息,以确定具体原因。</think>### 解决Visual Studio 2019编译7z源码时LNK1104错误的方法 #### 1. **检查项目转换与平台配置** - **旧项目兼容性**:`Format7z.dsw`是旧版Visual Studio工作区文件,需在VS2019中通过“迁移向导”转换为新版解决方案(`.sln`)。转换后,确保所有项目依赖项和路径已正确更新。 - **平台选择**:确认解决方案配置为`x64`,而非默认的`Win32`。右键解决方案 → **属性** → **配置管理器** → 将活动解决方案平台设为`x64`[^1]。 #### 2. **验证汇编文件路径与编译规则** - **路径问题**:检查`.asm`文件(如`quant-a.asm`)的路径是否包含空格或特殊字符,建议使用纯英文路径。例如:`E:\Projects\7z\common\i386\quant-a.asm`[^1]。 - **汇编器配置**:确保`.asm`文件的生成规则正确。右键`.asm`文件 → **属性** → 设置自定义生成工具: - **命令行**:例如`nasm -f win64 -o $(OutDir)\quant-a.obj %(Identity)`(根据实际汇编器调整)。 - **输出文件**:确认输出路径为`$(OutDir)\quant-a.obj`,与链接器输入一致。 #### 3. **修复生成目录与权限问题** - **输出目录设置**:右键项目 → **属性** → **常规** → 检查`输出目录`和`中间目录`是否为有效路径(如`$(SolutionDir)x64\Release\`)。 - **权限问题**:以管理员身份运行Visual Studio,避免因权限不足导致无法写入.obj文件。 #### 4. **更新工具集与依赖项** - **平台工具集**:右键项目 → **属性** → **常规** → 将`平台工具集`设为`Visual Studio 2019 (v142)`。 - **运行时库**:检查**C/C++** → **代码生成** → `运行时库`是否与项目需求匹配(如`/MT`或`/MD`)。 #### 5. **检查链接器输入与依赖库** - **附加依赖项**:右键项目 → **属性** → **链接器** → **输入** → 确认`.obj`文件已包含在`附加依赖项`中,或通过源码编译自动生成。 - **库目录**:添加依赖库的路径(如`$(SolutionDir)lib\x64`)。 #### 6. **清理并重新生成** - 执行**生成** → **清理解决方案**,然后重新生成,避免残留文件干扰。 --- ### 示例配置调整(ASM文件) ```plaintext 1. 右键quant-a.asm → 属性 2. 自定义生成工具 → 常规 - 命令行: nasm -f win64 -o "$(OutDir)quant-a.obj" "%(FullPath)" - 输出: $(OutDir)quant-a.obj ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值