【问题标题】:qt compile error: symbol(s) not found for architecture x86_64qt 编译错误:未找到架构 x86_64 的符号
【发布时间】:2015-05-31 07:08:06
【问题描述】:

尝试在 mac 上使用 Qt 5.4 clang 64bit 编译程序。该程序包括使用 Opal Kelly .dylib 文件和头文件与通过 USB 连接的 FPGA 进行通信。该程序在具有 .dylib (.dll) 和 windows 头文件的 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

任何帮助将不胜感激,如果您需要更多信息,请告诉我!

【问题讨论】:

标签: c++ macos qt compiler-errors


【解决方案1】:

表示存在以下问题:

  1. 当您应该链接 64 位时,您正在链接 32 位 dylib
  2. 链接器找不到库
  3. 或者库中没有所需的符号。

您可以查看编译器和链接器选项以确保正在链接该库。使用nmstring 确保函数存在于库中。

【讨论】:

    【解决方案2】:

    该程序包括使用 Opal Kelly .dylib 文件和头文件与通过 USB 连接的 FPGA 进行通信...... std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; 的未定义符号...

    __1 表示您正在使用 LLVM C++ 运行时 (libc++)。在某个地方,您可能正在与 GNU C++ 运行时 (libstdc++) 混合和匹配。 GNU C++ 运行时 (libstdc++)缺少其符号中的 __1

    您应该检查项目所有预构建的库,并确保它们使用其中一个。对于每个,您应该使用 (1) -stdlib=libc++ (LLVM) 或 (2) -stdlib=libstdc++ (GNU) 中的 CXXFLAGS

    请注意,像 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++?

    【讨论】:

      【解决方案3】:

      iphone模拟器:

      CONFIG(iphonesimulator, iphoneos | iphonesimulator)
      QMAKE_APPLE_SIMULATOR_ARCHS = x86_64 #i386 for 32bit
      

      苹果手机:

      CONFIG(iphoneos, iphoneos | iphonesimulator)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-17
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        • 2020-09-09
        • 2017-03-03
        • 2015-10-27
        • 1970-01-01
        相关资源
        最近更新 更多