Ios 通过桥接头的.c文件在Xcode 8更新后不工作
我一直在使用的应用程序使用一个外部库pdlib,它有自己的外部(.c文件),我一直在通过桥接头导入(.code>#导入“Uzi.c”,并通过我的Ios 通过桥接头的.c文件在Xcode 8更新后不工作,ios,c,swift,linker-errors,libpd,Ios,C,Swift,Linker Errors,Libpd,我一直在使用的应用程序使用一个外部库pdlib,它有自己的外部(.c文件),我一直在通过桥接头导入(.code>#导入“Uzi.c”,并通过我的ViewController类中的Uzi.c设置函数Uzi\u setup()调用我的主Swift文件。在几天前升级到新的公共Xcode8之前,我对这一点没有任何问题(整个夏天我对Xcode8Beta1没有任何问题) 以下是我得到的7个错误,列在一个“Mach-O链接器错误”保护伞下: Undefined symbols for architecture
ViewController
类中的Uzi.c设置函数Uzi\u setup()
调用我的主Swift文件。在几天前升级到新的公共Xcode8之前,我对这一点没有任何问题(整个夏天我对Xcode8Beta1没有任何问题)
以下是我得到的7个错误,列在一个“Mach-O链接器错误”保护伞下:
Undefined symbols for architecture x86_64:
"_Uzi_bang", referenced from:
_Uzi_setup in ViewController.o
"_Uzi_class", referenced from:
_Uzi_setup in ViewController.o
"_Uzi_float", referenced from:
_Uzi_setup in ViewController.o
"_Uzi_new", referenced from:
_Uzi_setup in ViewController.o
"_Uzi_pause", referenced from:
_Uzi_setup in ViewController.o
"_Uzi_resume", referenced from:
_Uzi_setup in ViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这些未定义的符号是6个函数和Uzi.c中声明的一个类。下面是指向整个c文件的链接:
我已经尝试了我在网上找到的所有解决类似问题的方法,但还没有找到解决方案。。。我尝试将“架构”和“有效架构”设置更改为仅armv7和armv7s(无arm64),并将“仅构建活动架构”更改为“否”。这些步骤似乎在类似的情况下对其他人有所帮助,但它们对我不起作用(拿走arm64会导致出现额外的错误)
XCode 8是一个非常新的版本(公开版本于9月13日发布),因此对于这次升级几乎没有其他问题会导致类似的问题
任何帮助都将不胜感激 由GitHub上的@danomatika解决: “通常不应包含/导入实现文件aka.c、.cpp、.m等。这就是导致重复符号问题的原因 这就是头文件中的“转发函数声明”的作用:告诉编译器函数存在以及它获取/返回的数据。然后,编译器假设函数的实际实现存在于实现文件中。如果找不到,则会出现“未定义的符号错误”。如果最终两次声明函数,即在.c文件中同时包含一个带有转发声明的头和函数本身的implementon,则会出现“重复符号错误” 这些都是较低级别的东西,这才是真正的问题,因为Pd External是围绕动态库设计的,因此没有构建或提供包含函数声明的头文件。这就是为什么你必须做一些额外的工作,自己做 它们是两个简单的修复方法,都涉及到声明要从头文件中的.c文件调用的所需函数
void uzi_setup()代码>
//只有在.c实现中才能找到前向声明安装函数
无效uzi_设置()代码>
//方便包装函数
无效外部设置(){
uzi_设置();
}
然后在桥接头中导入文件:
#导入“Externals.h”
在swift中,您现在可以执行以下操作:
externals\u setup()
@Olaf的可能副本我看不到我的.C文件被多次链接到的任何方式。另一个引用似乎不适用于我的问题,但如果它适用,您能告诉我它可能是怎样的吗?是
.C
还是.C
文件?第一个是C++,而不是C.@奥拉夫,它是<代码> .c/c>文件(我在问题标题中更正)。我的大部分应用程序都是用Swift编写的。我只是通过桥接头链接到这个外部。在最新的Xcode 8发行版之前,我在这方面没有任何问题。C文件是可执行文件的目标成员吗?