Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 由于文件扩展名,Apple Mach-O链接器错误_C++_Objective C_C_Xcode_Mach O - Fatal编程技术网

C++ 由于文件扩展名,Apple Mach-O链接器错误

C++ 由于文件扩展名,Apple Mach-O链接器错误,c++,objective-c,c,xcode,mach-o,C++,Objective C,C,Xcode,Mach O,可怕的典型链接器错误 ld:未找到架构armv6的符号 collect2:ld返回了1个退出状态 但是,它是由文件名引起的吗?我使用C++/Objective-C,所以我所有的Obj-C文件都是.mm,但我永远不能使用任何.C文件。例如,我在我的项目中包含了SFMT算法,它给了我这些错误,但是仅仅将单个.c文件更改为.cpp就可以消除这些错误,代码也可以正常工作!我只包括标题,所以我不知道为什么这会有什么不同 现在的问题是,我试图包括Freetype2,这给了我同样的问题(很确定是因为它是.c)

可怕的典型链接器错误

ld:未找到架构armv6的符号 collect2:ld返回了1个退出状态

但是,它是由文件名引起的吗?我使用C++/Objective-C,所以我所有的Obj-C文件都是.mm,但我永远不能使用任何.C文件。例如,我在我的项目中包含了SFMT算法,它给了我这些错误,但是仅仅将单个.c文件更改为.cpp就可以消除这些错误,代码也可以正常工作!我只包括标题,所以我不知道为什么这会有什么不同

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


你知道为什么会这样吗?如何停止.c文件的链接器错误?

用此文件环绕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编译器发生冲突,并导致链接器出现问题。
通过使用<代码>外部“C”< />代码,您可以告诉C++编译器使用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编译器发生冲突,并导致链接器出现问题。
通过使用<代码>外部“C”<代码>,您正在告诉C++编译器使用函数的C风格化。

包您的FryType包含在<代码>外“C”< /C> >指令:

// Non-C includes
#include <iostream>

extern "C"
{
    #include <freetype/freetype.h>
    // ... Other freetype includes
}
//非C包括
#包括
外部“C”
{
#包括
//…其他freetype包括
}

您可能可以在
外部“C”
指令中使用
#导入
而不是
#包含
。我从未尝试过,但我不明白为什么它不起作用。

将您的Freetype包含在
外部“C”
指令中:

// Non-C includes
#include <iostream>

extern "C"
{
    #include <freetype/freetype.h>
    // ... Other freetype includes
}
//非C包括
#包括
外部“C”
{
#包括
//…其他freetype包括
}

您可能可以在
外部“C”
指令中使用
#导入
而不是
#包含
。我从未尝试过,但我不明白为什么它不起作用。

这必须为OP想要包含的每个Freetype标头完成。修改第三方库会导致以后更新这些库时的维护问题。好的方面-我第一次错过了OP包含第三方库。如果是他自己的代码,他可能更喜欢在标题中使用链接规范(因此他不必在每次包含时都这样做)。我修改了我的答案以包含你的建议。这将必须为OP想要包含的每个Freetype标题完成。修改第三方库会导致以后更新这些库时的维护问题。好的方面-我第一次错过了OP包含第三方库。如果是他自己的代码,他可能更喜欢在标题中使用链接规范(因此他不必在每次包含时都这样做)。我修改了我的答案,加入了你的建议。很高兴知道。这很好地解决了我的SFMT问题,但Freetype仍在抱怨,所以二进制或链接可能有问题,我将不得不进一步研究。感谢您的快速回复!很高兴知道。这很好地解决了我的SFMT问题,但Freetype仍在抱怨,所以二进制或链接可能有问题,我将不得不进一步研究。感谢您的快速回复!如何为Freetype生成二进制文件?我相信你已经知道这一点,但你不能只是一个libfreetype。一个为桌面平台编译的。在本教程之后,我为所有4种架构构建了二进制文件,并将它们组合到unversal freetype.a中。我要再试一次,因为我在iOS模拟器中运行时遇到了相同的错误。所以这不仅仅是因为我丢失了arm6/7。你忘了发布教程的链接。在使用第三方LIB时,我使用此处描述的方法()。这种方法的唯一问题是,当我在库中更改某些内容时,除非我先进行清理,否则应用程序不会与更新的库重新链接。哎哟。。很抱歉。这是链接:一切正常,我的最后一步是我需要链接到zlib框架,我不知道Freetype需要这个。你如何为Freetype生成二进制文件?我相信你已经知道这一点,但你不能只是一个libfreetype。一个为桌面平台编译的。在本教程之后,我为所有4种架构构建了二进制文件,并将它们组合到unversal freetype.a中。我要再试一次,因为我在iOS模拟器中运行时遇到了相同的错误。所以这不仅仅是因为我丢失了arm6/7。你忘了发布教程的链接。在使用第三方LIB时,我使用此处描述的方法()。这种方法的唯一问题是,当我在库中更改某些内容时,除非我先进行清理,否则应用程序不会与更新的库重新链接。哎哟。。很抱歉。这就是链接:一切正常,我的最后一步是我需要链接到zlib框架,我不知道Freetype需要这个。