为macOS-x86_64构建,但尝试与为macOS-arm 64构建的文件链接

iqxoj9l9  于 2022-12-17  发布在  Mac
关注(0)|答案(1)|浏览(395)

我想在继续使用TextMate文本编辑器的同时使用GNU科学库(GSL),但在TextMate中编译代码时遇到了一些编译问题。
首先,我使用M1 Mac(Ventura 13.0.1),GSL库安装在:/usr/本地/包含/gsl
为了尝试编译,我选择了一个最基本的示例,并使用一个非常通用的MakeFile进行编译。

代码:

#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>

int
main (void)
{
  double x = 5.0;
  double y = gsl_sf_bessel_J0 (x);
  printf ("J0(%g) = %.18e\n", x, y);
  return 0;
}

生成文件:

CC = gcc
EXEC = PROG
SRC = $(wildcard *.c)
OBJ = $(SRC:.c=.o)
CFLAGS = -g -Wall

LIBS = -lm -lgsl -lgslcblas -I/usr/local/include/gsl
RM = rm -rf

all : $(EXEC)

%.o : %.c 
    $(CC) -o $@ -c $<
    
$(EXEC) : $(OBJ)
    $(CC) $(CFLAGS) -o $@ $^ $(LIBS) && time ./$(EXEC) && make clean

.PHONY : clean

clean :
    rm -rf $(EXEC) && rm -rf *.o

谢天谢地,如果我用macOS终端编译,一切都没问题。我也试着用应用内终端编译VS代码,效果很好。
然而,我在尝试使用MakeFile Bundle编译我的程序时遇到了一些错误(见下文)。经过几个小时的阅读和尝试,我认为问题是TextMate的编译器与macOS编译器不一样,它在macOS终端上运行良好,这要归功于Rosetta。我根本不是一个Maven,所以我很不确定我说的是什么。
以下是错误代码

ld: warning: ignoring file /usr/local/lib/libgslcblas.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64

...

Undefined symbols for architecture x86_64:

...

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [PROG] Error 1

我还尝试通过Homebrew安装库并在Makefile中更改路径,但是,在TextMate中,我出现了同样的错误信息。
我在这里发帖的原因是我找不到TextMate编辑器的任何解决方案,也是因为它可以在MacOS的本地终端上正常工作。
那么,有没有办法在TextMate中解决这个问题(也许在MakeFile中?直接在TextMate应用程序中?)?再次,我不是一个Maven,我真的不知道如何解决这个问题...
编辑:我试图通过使用以下命令编译文件来重新安装库:

./configure CC ="gcc -arch x86_64"
./make
...

现在,它可以在TextMate上工作,但不再在macOS终端上工作了...在macOS终端上,我有:

ignoring file /usr/local/lib/libgsl.dylib, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
...
Undefined symbols for architecture arm64:
...
ld: symbol(s) not found for architecture arm64

这和我以前所拥有的完全相反。有没有一种方法可以用这样一种方式来编译库,即我可以用这两种方式来编译我的程序?
先谢了!

wpx232ag

wpx232ag1#

好吧,我找到了一个适合我的办法。
要使其正常工作,当您通过GSL包的./configure安装库时,您必须精确选择多个体系结构,然后在终端中键入的命令应为:
sudo ./configure CC="gcc -arch arm64 -arch x86_64"
通过这样做,您应该能够使用我上面编写的适当的MakeFile在任何IDE中编译您的程序,因为该库是为几种体系结构构建的。

相关问题