以下是问题的说明。 我将其全部标记为代码以避免StackOverflow的隐式格式化。 必须处理类似Wiki的标记语言是非常烦人的 当我完全了解自己如何格式化问题时。
I am dealing with a weird toolchain issue on Macos.
Here is what is going on :
$ cat gmpz.c
char foo ();
int main ()
{
return foo();
}
$ cat libmy.c
char foo()
{
return 0;
}
I run these commands :
$ gcc -c libmy.c
$ gcc gmpz.c libmy.o
$ file ./a.out
./a.out: Mach-O 64-bit executable x86_64
So far it is all good. But here is the problem :
$ ar qv libmy.a libmy.o
ar: creating libmy.a
a - libmy.o
$ gcc gmpz.c libmy.a
ld: warning: in libmy.a, file was built for unsupported file format which
is not the architecture being linked (x86_64)
Undefined symbols:
"_foo", referenced from:
_main in ccpwg2Ju.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Adding "-arch i386" to gcc flags doesn't change the final warning and the
unresolved symbol error (except that the name of the architecture becomes different).
The above example works fine on Linux. It seems like the basic ar
functionality is broken on my system.
I have Xcode 3.2.6
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
$ ar --version
GNU ar (GNU Binutils) 2.21
Any ideas on resolving this issue are greatly appreciated.
答案 0 :(得分:0)
您没有使用Xcode原生ar
。 OS X本机ar
是BSD派生的,而不是GNU ar
。试试which ar
,找出你从哪里拿起它。 Xcode提供的应该是/usr/bin/ar
。
答案 1 :(得分:0)
GNU ar与原生Macos ld不兼容 原生Macos ar实际上就是这个:
/ usr / bin / ld -v @(#)PROGRAM:ld PROJECT:ld64-97.17 llvm版本2.9svn,来自Apple Clang 1.7(build 77)