Недавно я столкнулся с очень интересным и запутанным поведением при кросс-компиляции для aarch64 с использованием GCC7 и Qt.Вот короткий фрагмент, демонстрирующий проблему.
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'.
Моя проблема легко решается путем явной ссылки на libdl в файле CMakeLists и, вероятно, связана с моей платформой, но я довольно озадаченкак создать этот один 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, связывание завершается неудачно.Если потребуется дополнительная информация, не стесняйтесь спрашивать, я постараюсь уточнить.