尝试使用Qt 5.4 clang 64bit在mac上编译程序。该程序包括使用Opal Kelly .dylib文件和头文件与通过USB连接的FPGA通信。该程序使用Windows版本的.dylib(.dll)和Windows头文件在Windows上编译正常,但是在mac上我尝试编译时出现以下错误:
:-1: error: symbol(s) not found for architecture x86_64
编译器输出为:
Undefined symbols for architecture x86_64:
"_okFrontPanelDLL_LoadLib", referenced from:
MainWindow::AllocateMemory() in ProcessingFunctions.o
"_okFrontPanelManager_Destruct", referenced from:
OpalKelly::FrontPanelManager::~FrontPanelManager() in main.o
OpalKelly::FrontPanelManager::~FrontPanelManager() in fpga.o
OpalKelly::FrontPanelManager::~FrontPanelManager() in graphing.o
OpalKelly::FrontPanelManager::~FrontPanelManager() in FPGAScanner.o
OpalKelly::FrontPanelManager::~FrontPanelManager() in ProcessingFunctions.o
OpalKelly::FrontPanelManager::~FrontPanelManager() in mainwindow.o
OpalKelly::FrontPanelManager::~FrontPanelManager() in moc_mainwindow.o
...
"_okFrontPanel_ConfigureFPGA", referenced from:
OpalKellyLegacy::okCFrontPanel::ConfigureFPGA(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in mainwindow.o
"_okFrontPanel_Construct", referenced from:
OpalKellyLegacy::okCFrontPanel::okCFrontPanel() in ProcessingFunctions.o
"_okFrontPanel_Destruct", referenced from:
OpalKellyLegacy::okCFrontPanel::~okCFrontPanel() in mainwindow.o
"_okFrontPanel_GetDeviceCount", referenced from:
OpalKellyLegacy::okCFrontPanel::GetDeviceCount() in ProcessingFunctions.o
"_okFrontPanel_GetDeviceID", referenced from:
OpalKellyLegacy::okCFrontPanel::GetDeviceID() in ProcessingFunctions.o
"_okFrontPanel_GetSerialNumber", referenced from:
OpalKellyLegacy::okCFrontPanel::GetSerialNumber() in ProcessingFunctions.o
"_okFrontPanel_GetWireOutValue", referenced from:
OpalKellyLegacy::okCFrontPanel::GetWireOutValue(int) in FPGAScanner.o
"_okFrontPanel_IsFrontPanelEnabled", referenced from:
OpalKellyLegacy::okCFrontPanel::IsFrontPanelEnabled() in ProcessingFunctions.o
"_okFrontPanel_LoadDefaultPLLConfiguration", referenced from:
OpalKellyLegacy::okCFrontPanel::LoadDefaultPLLConfiguration() in mainwindow.o
"_okFrontPanel_OpenBySerial", referenced from:
OpalKellyLegacy::okCFrontPanel::OpenBySerial(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in ProcessingFunctions.o
"_okFrontPanel_ReadFromPipeOut", referenced from:
OpalKellyLegacy::okCFrontPanel::ReadFromPipeOut(int, long, unsigned char*) in FPGAScanner.o
"_okFrontPanel_SetWireInValue", referenced from:
OpalKellyLegacy::okCFrontPanel::SetWireInValue(int, unsigned int, unsigned int) in fpga.o
OpalKellyLegacy::okCFrontPanel::SetWireInValue(int, unsigned int, unsigned int) in FPGAScanner.o
"_okFrontPanel_UpdateWireIns", referenced from:
OpalKellyLegacy::okCFrontPanel::UpdateWireIns() in fpga.o
OpalKellyLegacy::okCFrontPanel::UpdateWireIns() in FPGAScanner.o
"_okFrontPanel_UpdateWireOuts", referenced from:
OpalKellyLegacy::okCFrontPanel::UpdateWireOuts() in FPGAScanner.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [AFE-MP-512.app/Contents/MacOS/AFE-MP-512] Error 1
13:38:18: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project AFE (kit: Clone of Desktop Qt 5.4.0 clang 32bit)
When executing step "Make"
13:38:18: Elapsed time: 00:31.
我知道当没有使用头文件中有SLOT或函数时会发生这种错误,但我不知道如何找到导致问题的原因。
Opal Kelly头文件位于here。
如果您需要更多信息,请随时与我们联系。
答案 0 :(得分:3)
这意味着存在以下问题:
您可以查看编译器和链接器选项以确保链接库。使用nm
或string
确保函数库中存在这些函数。
答案 1 :(得分:1)
该程序包括使用Opal Kelly .dylib文件和头文件与通过USB连接的FPGA通信....
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >
的未定义符号...
__1
表示您正在使用LLVM C ++运行时(libc++
)。在某些地方,您可能正在与GNU C ++运行时混合和匹配(libstdc++
)。 GNU C ++运行时(libstdc++
)在其符号中缺少 __1
。
您应该浏览项目 和 所有预先构建的库,并确保它们正在使用其中一个库。对于每个,您应该使用(1)CXXFLAGS
(LLVM)或(2)-stdlib=libc++
(GNU)的-stdlib=libstdc++
。
请注意,像Xcode这样的IDE可能会使用与Opal Kelly之类的库不同的-stdlib=...
设置。在这种情况下,让Xcode与Opal Kelly库匹配,或重建Opal Kelly库以匹配Xcode。
如果感兴趣,__1
是用于版本控制的内联命名空间。请参阅What are inline namespaces for?和Where does the __1 symbol come from when using LLVM's libc++?。
答案 2 :(得分:0)
iphonesimulator:
CONFIG(iphonesimulator, iphoneos | iphonesimulator)
QMAKE_APPLE_SIMULATOR_ARCHS = x86_64 #i386 for 32bit
的iPhoneOS:
CONFIG(iphoneos, iphoneos | iphonesimulator)