`
zhaoningbo
  • 浏览: 624036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

gcc编译包含数学函数的C代码时遇到的异常及解决

    博客分类:
  • c
阅读更多
引言:

  最近对C语言来了兴趣,业余了解体验了一下。在使用gcc编译时遇到两个异常很有意思,留下此篇希望能帮到和我一样的新手们。

  异常信息是:
1)undefined reference to `sin'
2)/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc


正文:

  首先上段源代码:
#include <stdio.h>
#include <math.h>

#define INT_COUNT 20

double f(int x);

int main(int argc, char *argv[]){
        int i;
        double results[INT_COUNT];

        results[0] = f(1);
        printf("%e\n", results[0]);

        return 0;
}

double f(int x){
        double result = 0.0, d;

        d = 1.0 * x;
        result = d - sin(d) - cos(d);

        return result;
}


  问题1:
[zhaoningbo@officetest1 CLang]$ gcc maxValue.c -o maxValue.out
/tmp/cc0QRY70.o: In function `f':
maxValue.c:(.text+0x48): undefined reference to `sin'
maxValue.c:(.text+0x70): undefined reference to `cos'
collect2: ld 返回 1
[zhaoningbo@officetest1 CLang]$

  这个问题网上的资料比较多,一查便可知道“这种错误一般是由于缺少库造成的.使用-lm即可”。的确到此问题可以解决了。

  问题2:
  笔者在自己虚拟机解决完问题1后,编译成功了。却在测试服务器上,报了如下信息:
[zhaoningbo@officetest1 CLang]$ gcc maxValue.c -lm -L/lib -L/usr/lib -o maxValue.out
/usr/bin/ld: skipping incompatible /usr/lib/libm.so when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/libm.a when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
[zhaoningbo@officetest1 CLang]$

  这是怎么回事呢?虚拟机用的32位系统,测试服务器是64位,于是一搜就有解决方法了。具体如下:
[zhaoningbo@officetest1 CLang]$ gcc maxValue.c -lm -L/lib64 -L/usr/lib64 -o maxValue.out
[zhaoningbo@officetest1 CLang]$ ./maxValue.out
-3.817733e-01
[zhaoningbo@officetest1 CLang]$ 

  至此问题解决了。

  最后推荐一个新手群(当然里面有高手)186660469。这是我找的最像C语言新手学习群的群 ~。=


引用:

1)问题1解决方法






1
0
分享到:
评论

相关推荐

    086 爱因斯坦的数学题 C语言源代码文件

    9. **编译与运行**:`86.c`是C源代码文件,需要通过编译器(如GCC)转化为可执行文件,这可能是`86.EXE`。在Windows环境下,`.EXE`扩展名表示可执行文件。 综上所述,这个编程挑战可能涉及了C语言的基本语法、控制...

    gcc教程、手册、大全

    使用GCC编译C程序** 基本的编译过程包括预处理、编译、汇编和链接。例如,对于一个名为`hello.c`的C程序,你可以使用以下命令: ``` gcc -o hello hello.c ``` 这将生成一个名为`hello`的可执行文件。 **3. GCC...

    gcc使用指南

    - C语言:作为最基础的支持语言之一,gcc可以编译标准C代码,并提供了一系列扩展功能来增强其性能。 - C++语言:gcc同样支持C++标准,并提供了对现代C++特性的广泛支持。 - Objective-C及Objective-C++:这两种...

    linux环境下的c编程代码

    通过`gcc -g filename.c`编译代码,包含调试信息。然后运行`gdb program`启动调试器。在GDB中,可以设置断点、单步执行、查看变量值等。 6. **头文件与预处理器**: 在Linux环境下,C代码经常引用系统头文件,如`...

    C&C++语言参考资料(含C&C++语言参考手册及C函数速查手册)

    “C函数速查手册”则为程序员提供了一个快速查找C语言标准库函数的工具,帮助他们在编写代码时迅速定位到所需功能,例如查找特定的I/O函数、排序算法或数学函数等。 这份参考资料对于初学者和经验丰富的开发者来说...

    c语言实现的高级计算器.7z

    5. **错误处理**:在处理用户输入时,可能会遇到无效的表达式或除以零的情况,需要设计适当的错误处理机制,如设置边界条件和异常处理。 6. **内存管理**:如果计算器程序涉及动态数据结构,如链表或栈,就需要使用...

    c语言linux系统编程进阶

    头文件包含了函数声明、宏定义和数据类型等信息,是C语言编程中的重要组成部分。系统求助通常指的是查阅官方文档、API手册等资源,以解决编程中遇到的问题或学习新功能。 #### 进阶主题概览 - **进程管理**:深入...

    c语言的lab实验课题

    8. **编译与调试**:了解如何使用编译器(如GCC)将源代码编译成可执行文件,并使用调试工具(如GDB)进行错误排查,对于完成Lab1至关重要。 9. **文件操作**:虽然这可能是更高级的主题,但Lab1可能引入基本的文件...

    mingw-runtime.rar

    1. **C运行时库(CRT)**:这是C语言的基础,包含了启动代码、内存分配、I/O操作、数学函数等基本功能。在MingW中,这部分由`libgcc`和`libstdc++`等库提供,它们是程序运行所必需的。 2. **C++标准库**:提供了STL...

    计算机软件-编程源码-C语言速算24.zip

    8. **编译和调试**:学习如何使用编译器(如GCC)将源码编译为可执行文件,并使用调试工具(如GDB)进行调试,理解代码运行过程。 9. **代码注释**:好的源码应该包含清晰的注释,解释代码的功能和工作原理,方便...

    C语言极简版计算器

    在Windows环境下,使用编译器如GCC或CLang,通过`gcc calculator.c -o calculator`命令将源代码文件(假设为`calculator.c`)编译为可执行文件`calculator.exe`。 学习这个项目,新手不仅可以掌握基本的C语言语法,...

    linux C函数手册

    Linux系统中的C函数手册,是开发C语言程序的重要参考资料,尤其对于在Linux环境下进行系统级编程的开发者来说,它是不可或缺的工具。这份手册通常被称为man pages,包含了丰富的C标准库函数、系统调用以及各种编程...

    C 语言:标准与实现

    - **编译与链接**: 在C语言程序开发过程中,编译阶段负责将源代码转换成机器码,而链接阶段则是将多个目标文件以及所需的库文件合并成一个可执行文件。理解这两个阶段的工作原理对于优化程序性能至关重要。 - **...

    c代码-ce shi dai ma

    在这个场景下,`README.txt`可能会解释`main.c`代码的功能、编写目的、如何编译运行代码以及可能遇到的问题和解决方法。对于初学者来说,这是一个了解代码功能和运行方式的重要参考资料。 在学习和使用C代码时,有...

    c语言24点游戏源码.zip

    9. **编译与调试**:使用`gcc`或其他C编译器编译源码,并使用`gdb`等工具进行调试,找出潜在问题。 10. **测试**:编写测试用例来确保程序在各种情况下都能正确运行,包括边界条件和异常情况。 以上是C语言24点...

    歌星大奖赛评分系统 C语言

    - **异常处理和错误检查**:编写健壮的代码,确保程序在遇到错误时能够正确地恢复或报告。 通过分析和实践这个项目,不仅可以提升C语言编程技能,还能加深对数据结构、算法和程序设计原则的理解,对于初学者来说,...

    基于C的计算器示例程序

    在编译和运行这个计算器程序时,可能需要使用到C编译器,如GCC或Clang,通过命令行参数传递源代码文件,并链接必要的库。编译完成后,可以运行程序并测试各种数学表达式的正确性。 总之,实现一个基于C的计算器示例...

    C语言计算器

    【标题】:“C语言计算器”是一个使用C编程语言开发的计算器程序,它具有图形用户界面(GUI),使得用户可以通过点击按钮进行数学运算。这个程序展示了如何在C语言中结合基本的编程逻辑和图形化交互。 【描述】:该...

    磁场计算C++程序

    7. **编译与调试**:使用编译器(如GCC或Clang)将源代码编译为可执行文件,调试工具(如GDB)帮助查找并修复程序中的错误。 8. **二次开发**:由于程序描述为“最简单的代码”,这意味着它可能是一个基础框架,可...

Global site tag (gtag.js) - Google Analytics