gcc编译遇到的一些错误(随时补充)

自从用了博客之后,老汉发现这是个好东西啊。再也不用去各个工程项目文件夹下寻找自己做的笔记了。

现在把平时遇到的一些个错误放到上边来,谨防下次再范

  1. 错误: 双目运算符 * 操作数(‘int’和‘int *’)无效

    1. *n = * n + 1;
      
      在程序中写了上述代码, 编译器将*当作双目运算符,并未当作指针。正确代码如下
       int temp;
       temp = *n;
       *n = temp + 1; 

  2. 错误:error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token

    网上有很多人问错误在哪,总结一下几点,希望对大家有帮助
        1 include 前忘记了加上“#”
        2 某些关键字书写错误,如“void”(我糊涂地把它写成viod)
        3 main前缺少分号‘;’
        4 引用了自定义的头文件,在自定义头文件中出现了上述错误
  3. 错误error: expected expression before ‘{’ token

    long a[MAX];
    a[MAX]={0, 3, 6 ,6};

    问题就出在上述代码上。gcc编译器提示

    error: expected expression before ‘{’ token
      a[MAX]={0, 3, 6 ,6};

    高手们肯定不会犯这个错误,新手你看出来了么?正确形式如下
    long a[MAX]={0, 3, 6 ,6};
    原因在于这种数组的缺省初始化需要在定义时进行,或者单独对每个元素赋值。

  4. gcc编译提示:undefined reference to `pow'

    我已经在头文件中引用了,math.h文件,但是依然提示该错误。原因在于使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,程序中用到的数学函数要到这个库文件里找。


configure: error: "flex required in PATH to complete build"


configure: error: "flex required in PATH to complete build"


<think>好的,我现在需要解释用户提到的两个命令:`cmake ../src` 和 `cmake --build .`。用户还提到了“既往史代码”,可能是指他们之前运行过这些命令,现在想了解它们的详细作用。 首先,我需要回忆CMake的基本工作流程。CMake是一个跨平台的构建系统生成工具,用于管理代码的编译过程。通常的步骤是先在源代码目录外创建一个构建目录,进入该目录后运行`cmake [path_to_source]`来生成构建文件,接着使用`cmake --build .`来编译项目。 接下来,分析第一个命令`cmake ../src`。这里用户可能是在构建目录中执行该命令,而源代码位于上一级目录的src文件夹下。需要解释每个部分:`cmake`是调用CMake工具,`../src`是源代码路径,说明CMakeLists.txt的位置。同时,要提到这会生成Makefile或其他构建系统文件,比如Ninja,具体取决于配置。 然后是第二个命令`cmake --build .`。这里需要解释`--build`参数指定构建目录为当前目录,点号代表当前目录。该命令会调用底层构建工具(如make或ninja)来编译项目。还要强调跨平台的好处,因为用户不需要直接调用make或msbuild,CMake会自动处理。 用户提到“既往史代码”,可能想确认这些命令是否与他们之前的操作有关,或者是否存在潜在问题。需要检查是否有常见错误,比如构建目录的位置是否正确,CMakeLists.txt是否存在,或者是否有缺失的依赖项。此外,可能需要提醒用户如果之前配置失败,应删除构建目录重新生成,以避免缓存问题。 还需要考虑用户可能的背景。如果他们不熟悉CMake,可能需要更详细的解释,比如构建目录的作用,为什么需要分开源目录和构建目录。此外,可以补充一些常用参数,比如`-DCMAKE_BUILD_TYPE=Debug`来设置构建类型,或者`--target install`进行安装。 最后,确保解释清晰,结构合理,分步骤说明每个命令的作用,并指出常见应用场景和注意事项。避免使用过于专业的术语,保持口语化,但准确无误。</think>以下是对两条CMake命令的逐步解释: --- ### **1. 生成构建系统文件** ```bash cmake ../src ``` #### 分步解析: - **`cmake`**:调用CMake构建系统生成器 - **`../src`**:指定CMakeLists.txt文件所在路径(上级目录的src文件夹) #### 关键过程: 1. **定位配置文件**:在`../src`目录中寻找`CMakeLists.txt` 2. **系统检测**: - 检查编译器gcc/clang/MSVC等) - 验证系统库依赖 - 检测硬件架构 3. **生成构建文件**: - 默认生成`Makefile`(Unix系系统) - 可生成其他类型文件(如Ninja:`-GNinja`) #### 典型输出文件: ``` ├── build/ # 当前构建目录 │ ├── CMakeCache.txt │ ├── CMakeFiles/ │ └── Makefile # 核心构建规则文件 └── src/ # 源代码目录 └── CMakeLists.txt ``` --- ### **2. 执行项目构建** ```bash cmake --build . ``` #### 分步解析: - **`--build .`**:指定在当前目录执行构建 - **跨平台特性**: - 在Linux/Mac调用`make` - 在Windows调用MSBuild或Ninja - 自动匹配之前生成的构建系统 #### 构建流程: 1. **编译源代码**: - 将`.cpp`等源文件编译为`.o`对象文件 2. **链接操作**: - 合并对象文件与库文件 - 生成最终可执行文件或库 3. **输出位置**: - 默认生成在`build/`目录下的`bin`或`lib`子目录 --- ### **典型应用场景** - **首次构建项目**: ```bash mkdir build && cd build cmake ../src # 生成构建系统 cmake --build . # 执行编译 ``` - **增量构建**(修改代码后): ```bash # 只需重复执行(无需重新生成Makefile) cmake --build . ``` - **清理构建产物**: ```bash cmake --build . --target clean ``` --- ### **补充说明** 1. **目录隔离实践**: - 推荐在`build/`目录操作,避免污染源代码 - 可随时删除`build/`目录重新开始构建 2. **常见问题处理**: - 若遇到缓存问题: ```bash rm -rf CMakeCache.txt CMakeFiles/ ``` - 指定生成器类型: ```bash cmake -G "Unix Makefiles" ../src ``` 3. **高级参数示例**: ```bash # 设置编译模式为Debug cmake -DCMAKE_BUILD_TYPE=Debug ../src # 并行编译(使用4个线程) cmake --build . --parallel 4 ``` 可通过以下命令验证构建结果: ```bash # 查找生成的可执行文件 find . -name "*.exe" -o -name "*.bin" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值