2011-10-11 58 views
0

下面是對問題的描述。 我將它全部標記爲代碼以避免StackOverflow所執行的隱式格式化。 當我確切地知道自己想要如何格式化我的問題時,這很煩人,不得不處理Wiki-like標記語言 。Macos 10.6.8(Snow Leopard)上的原生工具鏈問題

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

您未使用Xcode原生ar。 OS X native ar是BSD派生的,而不是GNU ar。試着which ar找出你從哪裏撿起它。 Xcode提供的應該在/usr/bin/ar

0

GNU的AR不能與本地的MacOS LD 兼容原生的MacOS AR這是一個實際上是:

在/ usr/bin中/ LD -v @(#)計劃:LD項目:ld64-97.17 llvm版本2.9svn,來自Apple Clang 1.7(build 77)