ld:文件是为Mac OS X上不支持的文件格式构建的

mat*_*u_b 5 c macos

我必须使用在其他x64_86计算机上编译的共享对象构建项目.我有这个错误:

cc -std=c11 -Wall -Werror -Wextra -pedantic -I./include src/server.c
obj/tftp.o -o bin/server -L./lib64 -lSocketUDP -lAdresseInternet -lpthread
ld: warning: ld: warning: ignoring file ./lib64/libSocketUDP.so, file was
built for unsupported file format ( 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ) which is not the architecture
being linked (x86_64): ./lib64/libSocketUDP.soignoring file
./lib64/libAdresseInternet.so, file was built for unsupported file format (
0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 ) which is not the architecture being linked (x86_64):
./lib64/libAdresseInternet.so
Run Code Online (Sandbox Code Playgroud)

我的Mac架构是x86_64,共享对象是在x86_64上编译的.编译适用于我的Linux计算机.

这是我的Makefile:

CFLAGS = -std=c11 -Wall -Werror -Wextra -pedantic -I./include
LDLIBS = -L./lib64
LDFLAGS = -lSocketUDP -lAdresseInternet -lpthread

all: obj/tftp.o bin/server bin/client

obj/tftp.o: src/tftp.c
    mkdir -p obj
    $(CC) $(CFLAGS) -c $^ -o $@

bin/server: src/server.c obj/tftp.o
    mkdir -p bin
    $(CC) $(CFLAGS) $^ -o $@ $(LDLIBS) $(LDFLAGS)

bin/client: src/client.c obj/tftp.o
    mkdir -p bin
    $(CC) $(CFLAGS) $^ -o $@ $(LDLIBS) $(LDFLAGS)

clean:
    $(RM) -r obj

distclean:
    $(RM) -r obj bin
Run Code Online (Sandbox Code Playgroud)

谢谢.

tro*_*foe 6

你不能这样做,因为这个"其他x86_64计算机"显然正在运行Linux并生成ELF格式的目标文件.

0x7F 0x45 0x4C 0x46
0x7F 'E'  'L'  'F'
Run Code Online (Sandbox Code Playgroud)

OSX/iOS使用Mach-O格式的目标文件,不能链接到不同类型的目标文件.

您需要编译OSX下的所有代码.