MacOS“错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)”
Posted
技术标签:
【中文标题】MacOS“错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)”【英文标题】:MacOS " error: linker command failed with exit code 1 (use -v to see invocation)" 【发布时间】:2022-01-20 23:48:58 【问题描述】:我正在尝试编译我的程序 P2.c 但弹出此错误,我什至不知道从哪里开始:
ld: warning: ignoring file P2, building for macOS-arm64 but attempting to link with file built for unknown-unsupported file format ( 0x23 0x69 0x6E 0x63 0x6C 0x75 0x64 0x65 0x20 0x3C 0x73 0x74 0x64 0x69 0x6F 0x2E )
Undefined symbols for architecture arm64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果有用,我会提供“酿造清单”:
% brew list
==> Formulae
ca-certificates gdbm harfbuzz libtiff lua pkg-config xz
cairo gettext icu4c libx11 lzo python@3.9
cython giflib jpeg libxau mpdecimal qt@5
fontconfig glib libcerf libxcb openssl@1.1 readline
freetype gnuplot libffi libxdmcp pango sqlite
fribidi gobject-introspection libpng libxext pcre webp
gd graphite2 libpthread-stubs libxrender pixman xorgproto
有人建议删除 'binutils' 但我没有安装它,或者更改 $PATH 变量但我不知道他指的是什么;
% which ranlib
/usr/bin/ranlib
% $(which ranlib) -V
Apple Inc. version cctools-986
error: /Library/Developer/CommandLineTools/usr/bin/ranlib: no archives specified
Usage: /Library/Developer/CommandLineTools/usr/bin/ranlib [-sactfqLT] [-] archive [...]
我只是想编译和调试我的 P2.c,求助 :(
这是程序:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Avaluar funcions: 1) f(x,y) ; 2) d/dx f(x,y) ; 3) d/dy f(x,y)
double f(double, double, double, double, double, double);
double fx(double, double, double, double, double, double);
double fy(double, double, double, double, double, double);
// 4) Predicció:
void p(double, double, double, double, double, double, double, double);
// 5) Correcció:
void c(double, double, double, double, double, double, double, double, double, double, double);
// 6) Main:
int main()
double A = -0.8, B = 0.5, C = -1.2, D = 0.3;
int n = 100000;
double h = 1e-2;
double pre = 1e-8;
int iterMax = 5;
double tol = 1e-6;
char outputfile[30];
FILE *fout;
printf("Donem el nom del fitxer de sortda\n");
scanf("%s", outputfile);
fout = fopen(outputfile, "w");
if (fout == NULL)
printf("Error al obrir %s\n", outputfile);
exit(1);
// // Inicialitzem (x0, y0). He trobat els punts inicials mitjançant el programa:
double x0 = 0.994910, y0 = 1.005750;
double x = x0, y = y0;
// Comprovem que son bons:
if (abs(f(x, y, A, B, C, D)) > pre)
return -1;
return 0;
// Imprimim el primer punt
fprintf(fout, "%f\t %f\n", x, y);
// Ara podem fer la continuació de la corba a partir d'aquest punt:
printf("Imprimint primer sentit...");
for (int i = 0; i < n / 2; i++)
// Fem la predicció
p(x, y, h, 1, A, B, C, D);
// Fem la comprovació de punts singulars:
if (sqrt(pow(fx(x, y, A, B, C, D), 2) + pow(fy(x, y, A, B, C, D), 2)) < tol)
printf("Som molt a prop d'un punt singular!");
return -4;
// Fem la correcció
c(x, y, x0, y0, h, iterMax, pre, A, B, C, D);
// Imprimim el punt
fprintf(fout, "%f\t %f\n", x, y);
printf("Primer sentit imprès!");
// Omplim els punts cap a l'altre sentit
printf("Imprimint segon sentit...");
x = x0;
y = y0;
for (int i = 0; i < n / 2; i++)
// Fem la predicció
p(x, y, h, -1, A, B, C, D);
// Fem la comprovació de punts singulars:
if (sqrt(pow(fx(x, y, A, B, C, D), 2) + pow(fy(x, y, A, B, C, D), 2)) < tol)
printf("Som molt a prop d'un punt singular!");
return -4;
// Fem la correcció
c(x, y, x0, y0, h, iterMax, pre, A, B, C, D);
// Imprimim el punt
fprintf(fout, "%f\t %f\n", x, y);
printf("Segon sentit imprès!");
printf("Procès completat!");
return 0;
double f(double x, double y, double A, double B, double C, double D)
return (16 * x * x * x * x + y * y * y * y + A * x * y * y - 16 * x * x * y - 1) * (x * x + (y - 1) * (y - 1) + B * x * y + C) + D;
double fx(double x, double y, double A, double B, double C, double D)
return ((C + x * x + (-1 + y) * (-1 + y) + B * x * y) * (64 * x * x * x - 32 * x * y + A * y * y) + (2 * x + B * y) * (-1 + 16 * x * x * x * x - 16 * x * x * y + A * x * y * y + y * y * y * y));
double fy(double x, double y, double A, double B, double C, double D)
return (2 * (C + x * x + (-1 + y) * (-1 + y) + B * x * y) * (-8 * x * x + A * x * y + 2 * y * y * y) + (-2 + B * x + 2 * y) * (-1 + 16 * x * x * x * x - 16 * x * x * y + A * x * y * y + y * y * y * y));
void p(double x, double y, double h, double sentit, double A, double B, double C, double D)
// Calculem el gradient de f normalitzat i després trobem el tangent (u,v) ==tg==> (v, -u)
double v[2] = sentit * fy(x, y, A, B, C, D) / sqrt(pow(fx(x, y, A, B, C, D), 2) + pow(fy(x, y, A, B, C, D), 2)), -sentit * fx(x, y, A, B, C, D) / sqrt(pow(fx(x, y, A, B, C, D), 2) + pow(fy(x, y, A, B, C, D), 2));
// Ara trobem els nous x, y;
x = x + h * v[0];
y = y + h * v[1];
void c(double x, double y, double x0, double y0, double h, double iterMax, double pre, double A, double B, double C, double D)
int iter = 0;
// Volem resoldre el sistema utilitzant el metode de Newton:
// Veiem si els punts verifiquen la precisió necessaria:
while (fabs(f(x, y, A, B, C, D)) < pre)
if (iter >= iterMax)
exit(-2);
// Fem iteracions del mètode de Newton
// v = v - DF-1(x)*F(x)
double x1 = x;
double detJ = fx(x, y, A, B, C, D) * 2 * (y - y0) - fy(x, y, A, B, C, D) * 2 * (x - x0);
if (fabs(detJ) == 0)
exit(-3);
x = x - (1 / detJ) * (2 * (y - y0) * f(x, y, A, B, C, D) - fy(x, y, A, B, C, D) * (pow((x - x0), 2) + pow((y - y0), 2) - h * h));
y = y - (1 / detJ) * (-2 * (x1 - x0) * f(x1, y, A, B, C, D) + fx(x1, y, A, B, C, D) * (pow((x1 - x0), 2) + pow((y - y0), 2) - h * h));
iter++;
非常感谢!
【问题讨论】:
如何构建程序?请edit您的问题向我们展示您使用的确切命令。unknown-unsupported file format
表示您传递给链接器的文件 P2 不是为您的体系结构构建的目标文件。
【参考方案1】:
如果我们看一下链接器提供的十六进制数字序列:
0x23 0x69 0x6E 0x63 0x6C 0x75 0x64 0x65 ...
在 ASCII 字母表中拼写为 #inbclude
。
这告诉我们您正在尝试直接链接源文件,而不是编译它。
由于您使用的是 macOS 系统,请使用clang
程序编译并链接源文件:
clang P2.c -o P2
在此之后,您应该在目录中有一个P2
可执行程序,然后您可以运行它:
./P2
【讨论】:
哇!太感谢了!!!问题解决了:) @Latheus What should I do when someone answers my question? ;)以上是关于MacOS“错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)”的主要内容,如果未能解决你的问题,请参考以下文章
铿锵声:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)而实现?
Objective-C clang:错误:链接器命令失败,退出代码为 1
clang:错误:链接器命令失败,退出代码为 1,react-native
错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)xcode 错误?