gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:44 24 4
gpt4 key购买 nike

我正在尝试在 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;命令行简单得多。根据答案,我为访问该问题的 future 用户编写了以下“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.asm”,C++ 是“main.cpp”,创建的可执行文件名为“test”。与答案一样,确保 .asm 文件中的函数以下划线开头。

最佳答案

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

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

关于c++ - 在 Xcode 中构建 C++ 和汇编源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24637565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com