【问题标题】:Compiling object c (.m) file to an object file(.o) in osx在osx中​​将对象c(.m)文件编译为对象文件(.o)
【发布时间】:2016-03-28 03:47:16
【问题描述】:

感谢您查看问题。有一个名为 try.m 的目标 c 文件,我使用以下命令将其编译为目标文件 try.o:

gcc -c try.m -o try.o -framework Foundation

try.h 是

int print_word( void );

try.m 是:

#include "try.h" 
#import <Foundation/Foundation.h>

int print_word( void )
{
  NSLog (@"say hello");
  return 0;
}

另外还有一个main.c文件,里面包含main()函数,看起来:

#include <stdio.h>
#include "try.h"

int main()
{
   printf( "This is main\n");
}

我通过以下命令将 main.c 编译为 main.o:

gcc -o main.o -c main.c

然后,我将main.o和try.o链接起来形成可执行文件main:

gcc  -o main main.o try.o

在这些步骤之后,发生了以下错误: enter image description here

错误是:

Undefined symbols for architecture x86_64:
"_NSLog", referenced from:
    _print_word in try.o
ld: symbol(s) not found for architecture x86_64    
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如何解决这些错误?

【问题讨论】:

    标签: objective-c macos gcc


    【解决方案1】:

    您需要链接到 Foundation 框架。您可以在一个命令中完成所有操作:gcc main.c try.m -framework Foundation

    【讨论】:

    • 感谢@EricS。有没有办法分别编译 main.o 和 try.o,然后将它们组合成一个可执行文件,如我的问题中所述?
    • gcc -o try.o -c try.m; gcc -o main.o -c main.c; gcc main.o try.o -framework Foundation
    猜你喜欢
    • 2010-12-17
    • 2020-02-07
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2011-01-17
    • 2020-11-25
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多