c++ - Ubuntu 和 OS-X 之间的头文件兼容性

标签 c++ linux macos prototype

我刚刚在 Linux 环境中完成了 C/C++ 类(class),当我复制并在我的 Mac (OS-X 10.7 Lion) 上运行一些简单代码时,我遇到了一些错误。我在两个平台上都使用 gcc/g++。似乎原型(prototype)没有正确传输:当我为 mysin.cpp 文件制作原型(prototype)时,它吐出下面的错误,但是当我将函数定义复制到它的位置时(即将所有代码放在一个文件中),它工作正常.

输出:

J-MacBook-Pro jh$ g++ -o main main.cpp -lm
Undefined symbols for architecture x86_64:
  "mysin(double, double)", referenced from:
      _main in cc67Vpm6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

mysin.cpp

#include <math.h>

double mysin(double x, double tol) {

  int N;
  int ii = 1;
  double q;
  double sN = x;
  double cont = x;
  double term = x;

  while (fabs(term) > tol) {
    term = term * (-x * x) / ((2 * ii + 1) * (2 * ii));
    sN = sN + term;
    ii = ii + 1;
  }

  return sN;

}

主要.cpp

#include <iostream>
#include <math.h>

double mysin(double x, double tol);

using namespace std;

int main(){

  cout << "sin(1) = " << mysin(1, 1e-6) << endl;

}

问题似乎出在某种类型的名称修改上,但我真的不知道发生了什么。有任何想法吗?我错过了什么非常明显的东西?

最佳答案

你需要分两步编译或者像这样一次性编译所有的c文件

g++ -o main.o -c main.cpp
g++ -o mysin.o -c mysin.cpp
g++ -o main main.o mysin.o -lm

g++ -o main mysin.cpp main.cpp -lm

否则 g++ 将只查看 main.cpp 而找不到你的 mysin 函数

关于c++ - Ubuntu 和 OS-X 之间的头文件兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8443733/

相关文章:

c++ - c++ 中的对象创建类型有什么区别?

c - Libexif undefined reference 错误

python - 有什么工具可以为 python 包交叉创建 OSX 安装程序?

iphone - 需要iPhone人机界面教程!

c++ - 最佳坐标容器

c++ - 如何获得与函数一起使用的模板模板参数推导?

c++ - 如何将多个替代模式之一与 C++11 正则表达式匹配

linux - 如何配置和构建内核以定义 CONFIG_* 并生成 autoconf.h

linux - 获取从您的 ip 地址发出的所有 url 调用的列表

macos - 如何解压和打包pkg文件?