我正在尝试链接一个将两个归档库组合到一个C程序的精简归档。
我构建了两个简单的hello world函数,并使用命令构建了一个归档文件:
ar rcs lib1.a lib1.o
ar rcs lib2.a lib2.o
然后使用精简档案合并两个档案:
ar rcsT all_lib.a lib1.a lib2.a
然后用gcc编译:
gcc main.o all_lib.a -o hello
我最后收到一条错误消息:
ld:警告:忽略文件all_lib.a,文件是为不支持的文件格式构建的,而不是所链接的体系结构(x86_64)
架构x86_64的未定义符号: “_func1”,引自: _main在main.o中 “_func2”,引自: _main在main.o中 ld:找不到架构x86_64的符号
如果我尝试直接将main.o与lib1.a和lib2.a链接起来,一切正常。
我在Mac OSX 10.6.8上使用gcc(MacPorts gcc46 4.6.3_3)4.6.3和GNU ar(GNU Binutils)2.21。
生成文件
test1: main.o lib1.o lib2.o
gcc main.o lib1.a lib2.a -o hello
test2: main.o combine
gcc main.o all_lib.a -o hello
lib1.o: lib1.c
gcc -c lib1.c
ar rcs lib1.a lib1.o
lib2.o: lib2.c
gcc -c lib2.c
ar rcs lib2.a lib2.o
combine: lib1.o lib2.o
ar rcsT all_lib.a lib1.a lib2.a
main.o: main.c
gcc -c main.c
clean:
rm -rf *.o *.a hello
的main.c
#include<stdio.h>
#include "lib1.h"
#include "lib2.h"
main()
{
printf("Hello World\n");
func1();
func2();
}
lib1.h
#include<stdio.h>
void func1();
lib2.h
#include<stdio.h>
void func2();
lib1.c
#include "lib1.h"
void func1()
{
printf("Hello World 1\n");
}
lib2.c
#include "lib2.h"
void func2()
{
printf("Hello World 2\n");
}
答案 0 :(得分:-1)
这些来源和makefile链接没有使用标准Apple工具的投诉。您使用的工具是否支持“-arch”开关,因此您可以明确指定“-arch x86_64”或“-arch i386”?
您可以使用“file”命令查看目标文件和可执行文件中的哪些体系结构。对于库文件,您可能必须提取模块并进行检查。