2016-04-18 7 views
1

他のx64_86コンピュータでコンパイルされた共有オブジェクトを使用してプロジェクトを構築する必要があります。ld:Mac OS Xでサポートされていないファイル形式のファイルが作成されました

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 

私の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 [email protected] 

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

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

clean: 
    $(RM) -r obj 

distclean: 
    $(RM) -r obj bin 

ありがとうございました。

答えて

4

"この他のx86_64コンピュータ"は明らかにLinuxを実行しており、ELF-formatのオブジェクトファイルを生成していたため、これを行うことはできません。

0x7F 0x45 0x4C 0x46 
0x7F 'E' 'L' 'F' 

OSX/iOSがMach-O formatオブジェクト・ファイルを使用して、オブジェクトファイルの異なる種類に対してリンクすることはできません。

OSXですべてのコードをコンパイルする必要があります。

3

あなたのSocketUDP libはおそらくLinux用に作られています。 LinuxとOS Xは、異なる、互換性のないオブジェクトファイル、ELF vs。マッハー

OS Xでもライブラリをビルドする必要があります。

+0

両方のプレートフォームのライブラリをコンパイルする方法はありますか? –

+0

@mathieu_b Linuxのボックスから外部のターゲットをクロスコンパイルして、macosの動的ライブラリを構築することができます。あなたはそれがあなたが疑問に思っている場合は、両方のプラットフォームで動作する1つのファイルを生成することはできません。 – casey

+0

@casey申し訳ありませんが、私は図書館の資料を持っていないので、先生がそれを集めました。私は別の解決策を見つける必要があります、ありがとう! –

関連する問題