c - ld : symbol(s) not found for architecture x86_64 error message when compiling

标签 c xcode

#include < stdio.h > 
#include < stdlib.h > 
#include "nrutil.h"
#include "ran1.h"

#define NVAR 2
#define NPAR 6
#define H 0.001
#define FILEIN "par.ini"
#define FILECI "ci.ini"
#define NMAX 1000000
void rk4(double * p, double * x, double * dx, double t,
  void( * deriv)(double * p, double * x, double * dx, double t));
void deriv(double * p, double * x, double * dx, double t);
 int main() {
  double * p, * x, * dx, t, dt, TTOT, DTSAV, seed = 0.0, xx = 0.0, y = 0.0;
  long count;
  int i, j;
  FILE * fp1, * fp2, * fp3, * fp4;
  p = dvector(1, NPAR);
  x = dvector(1, NVAR);
  dx = dvector(1, NVAR);

  if (!(fp1 = fopen(FILEIN, "r"))) nrerror("No se encuentra el archivo par.ini");
  for (i = 1; i <= NPAR; i++) fscanf(fp1, "%lg", & p[i]);
  fscanf(fp1, "%lg %lg ", & TTOT, & DTSAV);
  fclose(fp1);
  printf("Introduce un número: ");
  scanf("%lg", & seed);
  if (seed > 0) {
    seed = -seed;
  }

  for (i = 1; i <= NVAR; i++) {
    xx = ran1( & seed);
    y = xx * 15.0 - 65.0;
    x[1] = y;
  }
  for (j = 1; j <= NVAR; j++) {
    x[2] = 0.2 * x[1];
  }

  t = 0.0;
  count = 0;
  fp1 = fopen("vu.dat", "w");

  while (t <= TTOT && count <= NMAX) {

    fprintf(fp1, "%12.8g ", t);
    for (i = 1; i <= NVAR; i++) {
      fprintf(fp1, "%12.8g ", x[i]);
    }
    fprintf(fp1, "\n");

    dt = 0.0;
    while (dt <= DTSAV) {
      rk4(p, x, dx, t + dt, deriv);
      dt += H;
    }
    t += dt;
    count++;
  }
  fclose(fp1);

  free_dvector(p, 1, NPAR);
  free_dvector(x, 1, NVAR);
  free_dvector(dx, 1, NVAR);
  return 1;
}
void deriv(double * p, double * x, double * dx, double t) {

  dx[1] = 0.04 * x[1] * x[1] + 5 * x[1] + 140 - x[2] + p[1];
  dx[2] = p[2] * (p[3] * x[1] - x[2]);
  if (x[1] >= p[4]) {
    x[1] = p[5];
    x[2] = x[2] + p[6];
  }
  return;
}

void rk4(double * p, double * x, double * dx, double t,
  void( * deriv)(double * p, double * x, double * dx, double t)) {
  int i;
  double * dxm, * dxt, * xt;
  float hh, h6, mu;

  dxm = dvector(1, NVAR);
  dxt = dvector(1, NVAR);
  xt = dvector(1, NVAR);
  hh = H * 0.5;
  h6 = H / 6.0;

  ( * deriv)(p, x, dx, t); /*dx=f(x0)*/
  for (i = 1; i <= NVAR; i++) xt[i] = x[i] + hh * dx[i];
  ( * deriv)(p, xt, dxt, t + hh); /*xt es x1, dxt=f(x1)*/

  for (i = 1; i <= NVAR; i++) xt[i] = x[i] + hh * dxt[i];
  ( * deriv)(p, xt, dxm, t + hh); /*xt es x2, dxm=f(x2)*/

  for (i = 1; i <= NVAR; i++) {
    xt[i] = x[i] + H * dxm[i]; /*xt es x3, dxm=f(x1)+f(x2)*/
    dxm[i] += dxt[i];
  }
  ( * deriv)(p, xt, dxt, t + H); /*dxt=f(x3)*/

  for (i = 1; i <= NVAR; i++)
    x[i] += h6 * (dx[i] + dxt[i] + 2.0 * dxm[i]);

  free_dvector(xt, 1, NVAR);
  free_dvector(dxt, 1, NVAR);
  free_dvector(dxm, 1, NVAR);
  return;
}       

我使用 gcc -O3 -o rk4 rk4.c -lm 进行编译来执行 ./rk4 > temp.dat &
我收到的消息是:

Undefined symbols for architecture x86_64:
  "_dvector", referenced from:
      _main in rk4-173408.o
      _rk4 in rk4-173408.o
  "_free_dvector", referenced from:
      _main in rk4-173408.o
      _rk4 in rk4-173408.o
  "_nrerror", referenced from:
      _main in rk4-173408.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

最佳答案

您的代码似乎正在使用“Numerical Recipes”中的库,而 -lm 选项可能不会链接到该库(我猜 -lm 应该放在前面-o 选项)。您可以找到二进制文件或自己从源代码编译“Numerical Recipes”库,之后应添加选项 -L/path/to/the/library 以使链接器能够找到这些函数.

关于c - ld : symbol(s) not found for architecture x86_64 error message when compiling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53684944/

相关文章:

c - 链表插入和选择

xcode - 快速的 GLKit 不显示任何内容?

swift - 添加新的 UIView 后如何删除以前的堆栈?

c++ - 错误 LNK2005 : _main already defined in hold. 对象

c - 数组的内联初始化

将长字符数组转换为字节数组

c - 在 C 中排序链表的问题

ios - 如何使用 swift 将 google places autocomplete 添加到 xcode(教程)

objective-c - 无法从 NSPopUpButton 中删除项目

ios - 我应该在 Objective C 中的什么地方声明一个实例属性?