Проблема с собственным набором инструментов в Macos 10.6.8 (Snow Leopard)

#gcc #osx-snow-leopard #binutils #unix-ar

#gcc #osx-snow-leopard #binutils #unix-ar

Вопрос:

Ниже приведено описание проблемы. Я пометил все это как код, чтобы избежать неявного форматирования, которое выполняет StackOverflow. Это довольно раздражает, когда приходится иметь дело с вики-подобным языком разметки, когда я точно знаю, как я хочу отформатировать свой вопрос.

 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.
  

Ответ №1:

Вы не используете собственный Xcode ar . OS X native ar является производной от BSD, а не GNU ar . Попытайтесь which ar выяснить, откуда вы его берете. Предоставленный Xcode должен быть в /usr/bin/ar .

Ответ №2:

GNU ar несовместим с родной Macos ld Родной Macos ar это на самом деле :

/usr/bin/ld -v @(#) ПРОГРАММА: ПРОЕКТ ld: ld64-97.17 llvm версии 2.9svn, из Apple Clang 1.7 (сборка 77)