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



我试图在OS X 10.9的Xcode中构建一个命令行应用程序,其中包含一个。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

这是一个程序,什么也不做,只是暂时将值0移到EAX寄存器中。在创建.asm源文件时,我确保选择了NASM程序集。当我点击"play"按钮去构建可执行文件时,Xcode只会提示构建失败,而没有说明原因。


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


EDIT:得到答案后,我决定放弃Xcode;命令行要简单得多。基于这个答案,我为将来访问这个问题的用户写了如下的makefile:

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

,它假定程序集文件是'asm. exe '。asm', c++ 'main.cpp',创建的可执行文件名为'test '。与答案一样,请确保.asm文件中的函数以下划线开头。

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

"C"联动的函数应指定为:void NOTHING (void);

最新更新