在Xcode中构建C ++和汇编源代码

时间:2014-07-08 16:57:37

标签: c++ xcode assembly

我试图在Xcode for OS X 10.9中构建一个命令行应用程序,它包含一个.cpp源文件,该文件使用.asm程序集文件中外部定义的函数。 C ++代码:

#include <iostream>

using namespace std;

extern "C" void NOTHING();

int main(){

    NOTHING();

    return 0;    
}

以下是组装功能:

global NOTHING

section .text

NOTHING:

    mov eax, 0
    ret

它是一个程序,它只会暂时将零值移入EAX寄存器。我确保在创建.asm源文件时选择NASM程序集。当我点击“播放”时按钮构建可执行文件,Xcode只是声明构建失败,而没有指定原因。


我可以恢复在命令行中完成所有操作,就像在Linux上一样。但是,如果可能的话,我更喜欢开始使用Xcode,因为它结合了许多工具,例如: Git,成为一个单一的开发应用程序。


编辑:在回答之后,我决定放弃Xcode;命令行更简单。根据答案,我写了以下&#39; makefile&#39;对于访问该问题的未来用户:

test: main.cpp asm.o
    g++ -stdlib=libstdc++ main.cpp asm.o -o test

asm.o: asm.asm
    nasm -f macho64 asm.asm -o asm.o

假定汇编文件是&#39; asm.asm&#39;,C ++&#39; main.cpp&#39;,并且创建的可执行文件名为&#39; test。&#39;在答案中,确保.asm文件中的函数以下划线开头。

1 个答案:

答案 0 :(得分:3)

您需要为64位x86-64 Mach-O目标文件指定-f macho64。正如您已经看到的,Mach-O(函数)符号以下划线为前缀。因此,如果您给出函数定义NOTHING,则必须在程序集中提供全局_NOTHING

此外,具有"C"链接的函数应指定为:void NOTHING (void);