Xcode 8.3.3 for iOS app 中架构 x86_64 的未定义符号
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/46096095/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Undefined symbols for architecture x86_64 in Xcode 8.3.3 for iOS app
提问by EpicSyntax
I have just created a new project in Xcode 8.3.3 with Swift for iOS and I tried importing the external library SwiftLibModbus
我刚刚在 Xcode 8.3.3 中使用 Swift for iOS 创建了一个新项目,我尝试导入外部库SwiftLibModbus
I have ported the library to use Swift 3 (meaning, I fixed all the errors).
This library is using another library named libmodbus
that is written in C
and I am getting an Undefined symbols for architecture x86_64
error when this library is imported.
我已经移植了库以使用 Swift 3(意思是,我修复了所有错误)。该库正在使用另一个名为的库libmodbus
,并且在导入该库时C
出现Undefined symbols for architecture x86_64
错误。
Here is the full error:
这是完整的错误:
Undefined symbols for architecture x86_64:
"_modbus_free", referenced from:
__TFC23SomeProject_Wi_Fi_Connect14SwiftLibModbusD in SwiftLibModbus.o
"_modbus_strerror", referenced from:
__TFC23SomeProject_Wi_Fi_Connect14SwiftLibModbusP33_56F751289226F31D555D5DEEC0F0514F12buildNSErrorfT5errnoVs5Int32_CSo7NSError in SwiftLibModbus.o
"_modbus_write_registers", referenced from:
__TFFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus23writeRegistersFromAndOnFT7addressVs5Int3211numberArrayCSo7NSArray7successFT_T_7failureFCSo7NSErrorT__T_U_FT_T_ in SwiftLibModbus.o
"_modbus_read_input_registers", referenced from:
__TFFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus22readInputRegistersFromFT12startAddressVs5Int325countS1_7successFGSaPs9AnyObject__T_7failureFCSo7NSErrorT__T_U_FT_T_ in SwiftLibModbus.o
"_modbus_write_register", referenced from:
__TFFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus13writeRegisterFT7addressVs5Int325valueS1_7successFT_T_7failureFCSo7NSErrorT__T_U_FT_T_ in SwiftLibModbus.o
"_modbus_write_bit", referenced from:
__TFFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus8writeBitFT7addressVs5Int326statusSb7successFT_T_7failureFCSo7NSErrorT__T_U_FT_T_ in SwiftLibModbus.o
"_modbus_new_tcp", referenced from:
__TFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus8setupTCPfT9ipAddressCSo8NSString4portVs5Int326deviceS2__Sb in SwiftLibModbus.o
"_modbus_set_error_recovery", referenced from:
__TFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus8setupTCPfT9ipAddressCSo8NSString4portVs5Int326deviceS2__Sb in SwiftLibModbus.o
"_modbus_close", referenced from:
__TFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus10disconnectfT_T_ in SwiftLibModbus.o
"_modbus_connect", referenced from:
__TFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus16connectWithErrorfCSo7NSErrorSb in SwiftLibModbus.o
__TFFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus7connectFT7successFT_T_7failureFCSo7NSErrorT__T_U_FT_T_ in SwiftLibModbus.o
"_modbus_read_registers", referenced from:
__TFFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus17readRegistersFromFT12startAddressVs5Int325countS1_7successFGSaPs9AnyObject__T_7failureFCSo7NSErrorT__T_U_FT_T_ in SwiftLibModbus.o
"_modbus_read_input_bits", referenced from:
__TFFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus17readInputBitsFromFT12startAddressVs5Int325countS1_7successFGSaPs9AnyObject__T_7failureFCSo7NSErrorT__T_U_FT_T_ in SwiftLibModbus.o
"_modbus_read_bits", referenced from:
__TFFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus12readBitsFromFT12startAddressVs5Int325countS1_7successFGSaPs9AnyObject__T_7failureFCSo7NSErrorT__T_U_FT_T_ in SwiftLibModbus.o
"_modbus_set_slave", referenced from:
__TFC23SomeProject_Wi_Fi_Connect14SwiftLibModbus8setupTCPfT9ipAddressCSo8NSString4portVs5Int326deviceS2__Sb in SwiftLibModbus.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Is there any way around this? This is actually the only library I have found available for Modbus.
有没有办法解决?这实际上是我发现的唯一可用于 Modbus 的库。
Thanks :)
谢谢 :)
采纳答案by JozeRi
Hmmm... Did you drag the files inside a folder using "Copy items if needed" and "Create folder references" marked?
嗯...您是否使用标记的“根据需要复制项目”和“创建文件夹引用”将文件拖动到文件夹中?
If so, Xcode might not understand it needs to compile the files for the right architecture inside that folder. Just drag the bunch of files directly to Xcode and it should be fine.
如果是这样,Xcode 可能不明白它需要为该文件夹内的正确架构编译文件。只需将一堆文件直接拖到 Xcode 中就可以了。
回答by zontar
As pointed out somewhere else on SO, I've solved this one by:
正如在其他地方指出的那样,我已经通过以下方式解决了这个问题:
- renaming my projects and target which had an
_
(underscore) in the name - rebuilding the pod with
pod update
- cleaning derived data
File -> Workspace Settings -> Grey Arrow -> CMD + delete
- closing and reopening workspace
- creating a new test target from the
<->
target menu
- 重命名我的项目和目标,名称中有
_
(下划线) - 重建 pod
pod update
- 清洗派生数据
File -> Workspace Settings -> Grey Arrow -> CMD + delete
- 关闭和重新打开工作区
- 从
<->
目标菜单创建一个新的测试目标
回答by gfly
Mybe you had draged two library which is same to project, Xcode is confused about which one to use.just delete one,it will be ok.
我是不是你拖了两个相同的库来工程,Xcode不知道该用哪个,删一个就好了。
回答by vitalyster
If you just drag all files to XCode, it builds C code for currently selected architecture, you may need to clean and build project to get library compiled for right architecture after changing target (device/simulator)
如果您只是将所有文件拖到 XCode,它会为当前选定的架构构建 C 代码,您可能需要清理和构建项目,以便在更改目标(设备/模拟器)后为正确的架构编译库
To avoid this, native libraries should be built with external script for all required architectures and merged in one "fat" or "universal" library.
为了避免这种情况,应该使用外部脚本为所有必需的架构构建本地库,并合并到一个“胖”或“通用”库中。
回答by Madhumitha
check whether you have import your framework like
检查您是否已导入您的框架,例如
@import framework;