解决vscode中的undefined reference to `WinMain‘collect2.exe: error: ld returned 1 exit status,且保存方式合集

目录

翻译

解说

疑问

解决方法(设置手动保存或者自动保存)

1、手动保存

方式一:保存按钮(保存在项目的所有文件)

 方式二:快捷键保存(只保存当前的文件)

2、自动保存

新建文件小技巧(保存自带后缀)

1、快捷键(ctrl + n)

2、双击红框内

 只需输入正确的文件名即可(不用加后缀)


翻译

未定义的 “WinMain” 引用,错误: ld 返回 1 退出状态

解说

你当前的main程序没有定义,但是你又引用了它,所有会报错。

当前我是f4.c出了这个问题

我f1.c和f2.c都可以正常运行

疑问

为什么会这样呢?我明明写了代码,有主函数还有输出,为什么他说没有定义呢

这是因为vscode默认没设置自动保存,需要手动保存或者需要设置自动保存

解决方法(设置手动保存或者自动保存)

1、手动保存

方式一:保存按钮(保存在项目的所有文件)

位于活动栏最上方的Explorer ----->  Refresh Explorer()刷新,默认保存当前项目所有文件

 方式二:快捷键保存(只保存当前的文件)

Windows/Linux: Ctrl + S
macOS: Cmd + S

2、自动保存

首先设置自动保存

File -----> Auto Save 打勾

最后一步配置settings.json文件

左侧边栏中的第一个Explorer ----->打开.vscode -----> 打开settings.json

在你的settings.json里面加上

// settings.json 配置示例

  "files.autoSave": "afterDelay",  // 可选值:
                                   // - off: 关闭
                                   // - afterDelay: 延迟保存
                                   // - onFocusChange: 窗口失焦时保存
                                   // - onWindowChange: 切换文件时保存
  "files.autoSaveDelay": 1000      // 自动保存间隔(毫秒,默认1000)

完整代码

{
    "files.associations": {
      "*.py": "python",
      "iostream": "cpp",
      "*.tcc": "cpp",
      "string": "cpp",
      "unordered_map": "cpp",
      "vector": "cpp",
      "ostream": "cpp",
      "new": "cpp",
      "typeinfo": "cpp",
      "deque": "cpp",
      "initializer_list": "cpp",
      "iosfwd": "cpp",
      "fstream": "cpp",
      "sstream": "cpp",
      "map": "c",
      "stdio.h": "c",
      "algorithm": "cpp",
      "atomic": "cpp",
      "bit": "cpp",
      "cctype": "cpp",
      "clocale": "cpp",
      "cmath": "cpp",
      "compare": "cpp",
      "concepts": "cpp",
      "cstddef": "cpp",
      "cstdint": "cpp",
      "cstdio": "cpp",
      "cstdlib": "cpp",
      "cstring": "cpp",
      "ctime": "cpp",
      "cwchar": "cpp",
      "exception": "cpp",
      "ios": "cpp",
      "istream": "cpp",
      "iterator": "cpp",
      "limits": "cpp",
      "memory": "cpp",
      "random": "cpp",
      "set": "cpp",
      "stack": "cpp",
      "stdexcept": "cpp",
      "streambuf": "cpp",
      "system_error": "cpp",
      "tuple": "cpp",
      "type_traits": "cpp",
      "utility": "cpp",
      "xfacet": "cpp",
      "xiosbase": "cpp",
      "xlocale": "cpp",
      "xlocinfo": "cpp",
      "xlocnum": "cpp",
      "xmemory": "cpp",
      "xstddef": "cpp",
      "xstring": "cpp",
      "xtr1common": "cpp",
      "xtree": "cpp",
      "xutility": "cpp",
      "stdlib.h": "c",
      "string.h": "c"
    },
    "editor.suggest.snippetsPreventQuickSuggestions": false,
    "aiXcoder.showTrayIcon": true,
    
    "files.autoSave": "afterDelay",  // 可选值:
                                   // - off: 关闭
                                   // - afterDelay: 延迟保存
                                   // - onFocusChange: 窗口失焦时保存
                                   // - onWindowChange: 切换文件时保存
  "files.autoSaveDelay": 1000      // 自动保存间隔(毫秒,默认1000)
   
  }

新建文件小技巧(保存自带后缀)

1、快捷键(ctrl + n)

2、双击红框内

        

 只需输入正确的文件名即可(不用加后缀)

<think>嗯,我现在遇到了一个Hibernate的映射异常问题,错误信息是“org.hibernate.MappingException: Unknown entity: AcAiEnergyDto”。我需要找到解决办法。首先,我需要理解这个错误的原因。根据用户提供的引用内容,比如引用[1]、[2]、[3],这个错误通常是因为Hibernate无法识别实体类的配置。可能的原因包括实体类未被正确注册、配置文件缺失或错误,或者是使用了注解但配置不正确。 首先,我应该检查AcAiEnergyDto类是否被正确配置为Hibernate的实体。如果项目使用的是XML映射文件(.hbm.xml),需要确认该文件是否存在,并且路径是否正确。根据引用[3]中的情况,用户确认了.hbm.xml文件存在且内容正确,但问题仍然存在。这时候可能需要检查Hibernate的配置文件(通常是hibernate.cfg.xml)是否正确引用了这个映射文件。比如,是否有<mapping resource="路径/AcAiEnergyDto.hbm.xml"/>这样的配置。 另外,如果项目使用的是注解方式配置实体,可能需要检查是否有@Entity注解,并且是否正确导入javax.persistence.Entity包。但根据引用[3],用户提到项目中没有使用注解,而是使用XML配置,所以这可能不是问题所在。不过,还是需要确认是否有混合使用的情况,或者配置文件中是否有遗漏。 另一个可能的原因是Hibernate的配置没有正确初始化。比如,在Hibernate 5中,创建SessionFactory的方式有所变化,可能需要使用MetadataSources来添加映射。引用[2]提到Hibernate 5需要正确的配置,如果还是用旧的方法可能会导致实体未被识别。所以,用户可能需要检查创建SessionFactory的代码,确保使用了新的API,例如: ```java Configuration configuration = new Configuration().configure(); configuration.addResource("AcAiEnergyDto.hbm.xml"); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()).build(); SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); ``` 或者使用MetadataSources: ```java MetadataSources metadataSources = new MetadataSources( new StandardServiceRegistryBuilder().configure().build()); metadataSources.addResource("AcAiEnergyDto.hbm.xml"); SessionFactory sessionFactory = metadataSources.buildMetadata().buildSessionFactory(); ``` 此外,还要检查映射文件中的类名和包路径是否正确。比如,在.hbm.xml文件中,是否正确定义了class元素的name属性,包括完整的包名。例如: ```xml <class name="com.example.AcAiEnergyDto" table="ac_ai_energy"> ... </class> ``` 如果包名不正确,Hibernate将无法找到对应的实体类。同时,确认表名是否正确,以及属性和列的映射是否正确。 如果以上步骤都确认无误,可能需要检查类路径下是否有重复的配置文件导致冲突,或者是否有缓存问题。有时候清理并重新构建项目可以解决这类问题。 总结下来,解决步骤可能是: 1. 确认AcAiEnergyDto的.hbm.xml文件存在且配置正确。 2. 检查hibernate.cfg.xml是否包含对该映射文件的引用。 3. 验证创建SessionFactory的代码是否适应Hibernate 5的配置方式。 4. 确保映射文件中的类名和包路径正确无误。 5. 清理并重新构建项目,重启应用服务器。</think>### 解决 Hibernate 中 `org.hibernate.MappingException: Unknown entity: AcAiEnergyDto` 的方法 此错误表明 Hibernate 未正确识别 `AcAiEnergyDto` 类的实体映射配置。以下是逐步排查和解决方案: #### 1. 确认实体映射配置 - **XML 映射文件检查** 确保 `AcAiEnergyDto.hbm.xml` 文件存在且路径正确,例如位于 `src/main/resources/com/example/mapping/` 目录下。文件内容需包含完整的包名和类名: ```xml <hibernate-mapping> <class name="com.example.dto.AcAiEnergyDto" table="ac_ai_energy"> <id name="id" column="id" type="long"> <generator class="native"/> </id> <!-- 其他属性映射 --> </class> </hibernate-mapping> ``` 若未正确配置 `name` 属性(如缺少包名),Hibernate 将无法解析实体[^3]。 - **Hibernate 主配置文件引用** 在 `hibernate.cfg.xml` 中需显式添加映射文件路径: ```xml <session-factory> <!-- 其他配置 --> <mapping resource="com/example/mapping/AcAiEnergyDto.hbm.xml"/> </session-factory> ``` 若未添加该行,实体映射不会被加载[^1]。 #### 2. 检查 Hibernate 5 的配置方式(关键步骤) Hibernate 5 的 `SessionFactory` 初始化方式与旧版本不同,需使用 `MetadataSources` 或更新 `Configuration` 的调用逻辑: ```java // 正确方式(Hibernate 5+) StandardServiceRegistry registry = new StandardServiceRegistryBuilder() .configure("hibernate.cfg.xml") .build(); MetadataSources sources = new MetadataSources(registry); sources.addResource("com/example/mapping/AcAiEnergyDto.hbm.xml"); // 显式添加映射 SessionFactory sessionFactory = sources.buildMetadata().buildSessionFactory(); ``` 若仍使用旧版 `configuration.buildSessionFactory()` 而未显式加载映射文件,会导致实体未注册[^2]。 #### 3. 验证类名和包路径 - 确保 `.hbm.xml` 中的 `<class name="...">` 包含完整的包名(如 `com.example.dto.AcAiEnergyDto`)。 - 确认 `AcAiEnergyDto` 类的字段与映射文件中的 `<property>` 定义一致,避免拼写错误。 #### 4. 清理和重建项目 某些 IDE(如 Eclipse 或 IntelliJ)可能存在缓存问题,执行以下操作: 1. 清理项目(`mvn clean` 或 Gradle 的 `clean` 任务)。 2. 重新编译并重启应用服务器。 #### 5. 其他可能性 - 若混合使用注解和 XML 映射,需移除冲突的 `@Entity` 注解。 - 检查依赖冲突,确保 Hibernate 核心库版本一致(如 `hibernate-core-5.6.14.Final`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值