记一次从linux迁移代码到Windows过程中碰到的问题

1.文件编码错误,utf-8未签名与签名的区别导致的错误

 warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

修改方式,通过错误定位到该文件,依次点file->save ***.cpp as->弹出窗口点save右侧小箭头->save with Encoding->替换选是->encoding框选utf-8 with signature
2.g13微软,冲突问题

1>v3_lane_convertor.cpp(351,24): error C2589: '(': illegal token on right side of '::'
1>v3_lane_convertor.cpp(351,24): error C2062: type 'unknown-type' unexpected
1>v3_lane_convertor.cpp(351,24): error C2059: syntax error: ')'

修改方式:std::min(curves.size(), i + nCurVecSize);换成std::min<size_t>(curves.size(), i + nCurVecSize);

3.c++标准问题

Record record = {data.name_, 7, {.str_ = str_ptr}};

在Windows上只有20可以编过,其他标准不行
修改方式:右键项目属性->c+±>language->c++ language standard 选c++20->conformance mode 选 NO(/permissive)(严格执行c++对应标准)
4.hash.h涉及到的问题,
1.__cplusplus始终为199711L,修改对应项目command,两个步骤
修改方式:右键项目属性->c+±>command line -> addtional options 添加宏/Zc:__cplusplus
右键项目属性->c+±>language->c++ language standard 选c++17->conformance mode 选 NO(/permissive)(严格执行c++对应标准)
2.GOOGLE_PROTOBUF_HASH_COMPARE std::hash_compare,老是使用这个过期的hash_compare
修改方式:添加宏__GLIBCXX__=20171201 _STLPORT_VERSION
5.glog中的宏ERROR重定义问题

glog/log_severity.h(57,1): fatal  error C1189: #error:  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h.

在引用#include <glog/logging.h>前加上两个定义#define GOOGLE_GLOG_DLL_DECL #define GLOG_NO_ABBREVIATED_SEVERITIES
同时修改自己代码中定义的的ERROR为MYERROR。
6.g13微软,冲突问题

error C2059: 语法错误:<class-head>” 
error C2143: 语法错误: 缺少“;(在“{”的前面) 
error C2447:{: 缺少函数标题(是否是老式的形式表?)

又是宏定义冲突,项目里的namespace interface与微软宏定义冲突,没的搞,改名字
7.数组初始化问题

size_t argc = sizeof...(param);
napi_value argv[argc];
if (napi_get_cb_info(env, args, &argc, argv, nullptr, nullptr)
error C2131: 表达式的计算结果不是常数
message : 因读取超过生命周期的变量而失败
message : 请参见“a”的用法

修改方式:

size_t argc = sizeof...(param);
std::vector<napi_value> argv(argc);
if (napi_get_cb_info(env, args, &argc, argv.data(), nullptr, nullptr) 

8.运行库与目的库类型不一致,一个是debug,一个是release

libprotobufd.lib(int128.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”

解决方式:

c++->代码生成code generation->运行库runtime library选择Multi-threaded Debug DLL (/MDd)

9.将动态库的库导入文件当做静态库使用,引导文件只有链接符号,没有函数内容
编译golg库为debug

diagnostic.lib(hor_diagnoser.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport)

10.std::byte与旧标准命名冲突

error C2872: “byte”: 不明确的符号
message : 可能是“unsigned char byte”
message : 或    “std::byte”

解决方法:添加宏add_definitions(-D_HAS_STD_BYTE=0)

11.error LNK2019: 无法解析的外部符号 "public: static struct napi_threadsafe_function__
解决方法:就是对应cc文件没放对地方。。。
12.error LNK2019: 明明头文件,实现文件都有,但还是链接错误,而且路径也对,测试下来同一个类的两个函数一个可以链接,一个链接错误,太奇怪了。
解决方法:头文件顺序有错误,把头文件依赖的类或者结构体的头文件放到头文件前

// #include "ehp_route_manager.h"
// #include "ehp_configor.h"
#include "ehp_configor.h"
#include "ehp_route_manager.h"

13.ws2def.h与winsock.h命名冲突
解决方法:先引用ws2def.h,在引用windows.h

#ifdef WINDOWS
  #define GOOGLE_GLOG_DLL_DECL
  #define GLOG_NO_ABBREVIATED_SEVERITIES
  #include <winsock2.h>
  #include <Windows.h>
#endif
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将VS Code项目迁移Linux并进行编译可以按照以下步骤进行: 1. 安装Linux操作系统:首先,在目标Linux机器上安装适当的Linux发行版。您可以选择Ubuntu、CentOS、Debian等常见的Linux发行版。 2. 安装所需的编译工具和依赖项:在Linux上进行编译,您需要安装适当的编译工具和所需的依赖项。例如,对于C/C++项目,您需要安装gcc和g++编译器,以及相关的开发库。 3. 安装VS Code:在Linux上安装VS Code编辑器,可以从官方网站(https://code.visualstudio.com/)下载适合Linux的版本,并按照安装说明进行安装。 4. 迁移项目文件:将您的VS Code项目文件从Windows系统复制到Linux系统。您可以通过使用USB驱动器、网络共享或其他文件传输工具来完成此操作。 5. 配置编译环境:根据您的项目需求,在Linux上配置适当的编译环境。这可能涉及到设置编译器的路径、调整库文件的位置等。 6. 配置构建任务:在VS Code配置构建任务,以便在Linux上进行编译。您可以使用VS Code的任务管理器(tasks.json)来定义您的构建任务,并指定编译命令、参数等。 7. 调试配置(可选):如果您需要在Linux上进行调试,您还可以配置VS Code的调试器来连接到您的项目,并设置断点等调试信息。 8. 编译项目:通过在VS Code运行构建任务,即可在Linux上编译您的项目。您可以使用VS Code的终端或集成的终端工具来执行构建命令。 请注意,迁移Linux并进行编译可能涉及到更多细节和配置,具体取决于您的项目和环境。确保您了解您的项目所需的依赖项和编译要求,并根据需要进行相应的配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值