在我们的项目中,我们依赖于2个打印机库:StarIO&爱普生ePOS,在编译期间我遇到了这个错误:
duplicate symbol _GetOnlineStatus in:
/Users/brendan/Development/xxxx/Frameworks/StarIO.framework/StarIO(StarIOPort.o)
/Users/brendan/Development/xxxx/xxxxApp/SDKs/Epson/libepos2.a(eposprint_common_status.o)
ld: 1 duplicate symbol for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
需要一些帮助以解决此问题的最佳方法。
答案 0 :(得分:0)
这种情况有时可能具有挑战性 - 因为两个库似乎都使用相同的符号,因为实现可能会有所不同。解决此问题的唯一可靠方法是让每个库供应商为其库中的每个类/符号使用前缀。
除此之外,由于我假设你只有epson库(libepos2.a)的编译版本,你或者想要:
StarIO.framework
选项1:
如果您决定只重命名导致问题的符号,请在StarIO.framework
中搜索:
GetOnlineStatus
然后将它在任何地方(在12个文件中)重命名,它在该库中显示的内容略有不同:
StarIO_GetOnlineStatus
位于以下:
StarIO.framework/Versions/A/Headers/SMPort.h
StarIO.framework/Versions/A/Headers/WBluetoothPort.h
StarIO.framework/Versions/A/Headers/BluetoothPort.h
StarIO.framework/Versions/A/Headers/starmicronics/StarIOPort.h
StarIO.framework/Versions/Current/Headers/SMPort.h
StarIO.framework/Versions/Current/Headers/WBluetoothPort.h
StarIO.framework/Versions/Current/Headers/BluetoothPort.h
StarIO.framework/Versions/Current/Headers/starmicronics/StarIOPort.h
StarIO.framework/Headers/SMPort.h
StarIO.framework/Headers/BluetoothPort.h
StarIO.framework/Headers/WBluetoothPort.h
StarIO.framework/Headers/starmicronics/StarIOPort.h
选项2:
另一个选择是将两个库合并为一个,尽管这可能会相当复杂并且可能会出现其他问题。有关如何执行此操作的详细信息please see this answer here on stackoverflow。