如何在创建QObject时链接libdl?从代码链接?

时间:2018-09-25 11:02:00

标签: c++ qt gcc linker

我最近在使用GCC7和Qt对aarch64进行交叉编译时遇到了一个非常有趣且令人困惑的行为。这是演示该问题的简短代码。

int main(int argc, char* argv[]) {
  QCoreApplication app(argc, argv);
  RemoteControl::Internet inet;
  Renderer rend;
  app.exec();
}  

当我省略从QObject继承的对象的创建时(主要功能如下):

int main(int argc, char* argv[]) {
  QCoreApplication app(argc, argv);
  //RemoteControl::Internet inet;
  Renderer rend;
  app.exec();
} 

我收到以下链接器错误:对符号'dlsym @@ GLIBC_2.17'的未定义引用。

我的问题可以通过在CMakeLists文件中显式链接到libdl来轻松解决,并且可能特定于我的平台,但是我对如何创建一个QObject链接libdl感到困惑。我发现可以使用杂注注释从MSVC中的代码链接库,但是还无法找到有关GCC的解释,因此我来这里问一个。欢迎任何建议和可能的解释。

编辑: 为了添加更多细节,我编辑了代码片段并添加了一些CMake:

QT5_WRAP_CPP(Internet_HEADERS_MOC
  include/RemoteControl/Internet.h)

add_library(our_lib STATIC
  src/RemoteControl/Internet.cpp
  src/Renderer.cpp
  ${Internet_HEADERS_MOC}
)

target_link_libraries(our_lib our_other_lib)

add_executable(our_exec src/main.cpp)
target_link_libraries(our_exec our_lib)

当我在主函数中创建RemoteControl :: Internet实例(这是从QOBject继承的上述类)的实例时,链接成功,但如果我不这样做,而仅创建Renderer实例,则链接失败。如果需要更多信息,请随时提出,我会尽力澄清。

0 个答案:

没有答案