Apple Mach-O链接器错误,原因是文件扩展名

Apple Mach-O Linker Error, due to file extension

本文关键字:文件 扩展名 Mach-O 链接 错误 Apple      更新时间:2023-10-16

可怕的典型链接器错误。。

ld:找不到体系结构armv6的符号collect2:ld返回1退出状态

但是,它是由文件名引起的?我使用C++/Objective-C,所以我所有的Obj-C文件都是.mm,但我永远不能使用任何.C文件。例如,我在我的项目中包含了SFMT算法,它给了我这些错误,但只需将单个.c文件更改为.cpp就可以了,代码运行得很好!我只包括了标题,所以我不确定为什么这会有什么不同。

现在的问题是,我试图包含Freetype2,这给了我同样的问题(很肯定是因为它是.c),但它太大了,无法重命名每个文件,而且我还使用了链接的二进制文件,所以除非我用新的文件名重新编译它,否则我无法更改它。所以,现在是时候找到这背后的真正原因了。

知道为什么会发生这种事吗?如何停止.c文件的链接器错误?

extern "C"指令中包装Freetype includes:

// Non-C includes
#include <iostream>
extern "C"
{
    #include <freetype/freetype.h>
    // ... Other freetype includes
}

您可能可以在extern "C"指令中使用#import而不是#include。我从来没有试过,但我不明白为什么它不起作用。

用这个包围c头文件。这也可以包括:

#ifdef __cplusplus   
extern "C" {         
#endif     
// function declarations etc if this is your own header.
// OR you can use this in the .mm file to surround your include.
//...
#ifdef __cplusplus       
};                       
#endif   

这为c函数指定了外部链接。如果在包含c.h文件时不这样做,c++编译器将以与c编译器不同的方式进行破坏,并导致链接器出现问题
通过使用extern "C",您告诉您的C++编译器使用C风格的函数处理。