【发布时间】:2011-12-09 09:52:00
【问题描述】:
我刚刚在 Linux 环境中完成了 C/C++ 课程,当我复制并在我的 Mac(OS-X 10.7 Lion)上运行一些简单的代码时,我遇到了一些错误。我在两个平台上都使用 gcc/g++。原型设计似乎没有正确传输:当我对 mysin.cpp 文件进行原型设计时,它会吐出下面的错误,但是当我将函数定义复制到它的位置时(即将所有代码放在一个文件中),它工作正常.
输出:
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;
}
main.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;
}
似乎问题出在某种类型的名称修改上,但我真的不知道发生了什么。有任何想法吗?我遗漏了一些非常明显的东西?
【问题讨论】:
-
您需要将 mysin.cpp 包含在编译中,以便链接器可以看到您的函数
mysin的定义。试试g++ -o main mysin.cpp main.cpp -lm -
旁注(不能解决问题):不要复制原型;使用头文件。