Apple Mach-O链接器错误,原因是文件扩展名
Apple Mach-O Linker Error, due to file extension
可怕的典型链接器错误。。
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风格的函数处理。
相关文章:
- 如何按文件扩展名引用文件夹中的文件
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 通过cMake使用具有自定义文件扩展名的共享库
- 在另一个字符串中插入文件扩展名之前的字符串
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- Eclipse CDT:传递具有相同文件扩展名的多个程序参数
- 将C 代码桥接到我的Swift代码中.哪些文件扩展名为XCode中的基于C的语言
- 如何打开并显示C 中任何文件扩展名的文件
- 循环浏览所有项目,其中QTREEVIEW QFILESYSTEMMODEL上具有所需的文件扩展名
- 如何调用 ShellExecute 以使用 C++ 打开具有特定程序的文件,而无需关联相同的文件扩展名
- 用户定义的C 文件扩展名,用于G 汇编
- 如何在 INFLATE 后获取原始文件扩展名
- CMake:如何仅将特定文件扩展名从一个目录复制到另一个目录
- 获取文件扩展名
- 共享库的TX文件扩展名
- 如何创建一个不敏感的正则态度以匹配文件扩展名
- 如何更改QT上的文件扩展名
- 列出 OpenCV 支持的文件扩展名
- 如何避免 CFile查找文件扩展名超过三个字符的误报
- C++模板实现文件扩展名约定