Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Ubuntu和OS-X之间的头文件兼容性_C++_Linux_Macos_Prototype - Fatal编程技术网

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

C++ Ubuntu和OS-X之间的头文件兼容性,c++,linux,macos,prototype,C++,Linux,Macos,Prototype,我刚刚在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:

我刚刚在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;

}
#包括
双mysin(双x,双tol){
int N;
int ii=1;
双q;
双sN=x;
双cont=x;
双项=x;
while(晶圆厂(期限)>tol){
术语=术语*(-x*x)/((2*ii+1)*(2*ii));
sN=sN+项;
ii=ii+1;
}
返回序列号;
}
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(双x,双tol);
使用名称空间std;
int main(){

您需要分两个阶段进行编译,或者一次编译所有的c文件

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


否则,g++将只查看main.cpp,找不到您的mysin函数,这是一个链接器错误。当您编译并链接main.cpp时,链接器抱怨它找不到双mysin(双x,双tol)的定义(编译代码),因为您没有告诉编译器它在哪里

因此,编译两个源文件,然后将它们链接在一起:

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

(您也可以只执行g++-Wall-o main.cpp mysin.cpp-lm)

您需要将mysin.cpp包含到编译中,以便链接器可以看到函数
mysin
的定义。尝试
g++-o main mysin.cpp main.cpp-lm
旁注(无法解决问题):不要复制原型;使用头文件…当然。新的错误消息让我很生气。非常感谢。
g++ -c -Wall mysin.cpp -o mysin.o
g++ -c -Wall main.cpp -o main.o
g++ -o main main.o mysin.o -lm