我最近在使用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实例,则链接失败。如果需要更多信息,请随时提出,我会尽力澄清。