Как libdl связан с созданием QObject?Ссылка из кода? - PullRequest
0 голосов
/ 25 сентября 2018

Недавно я столкнулся с очень интересным и запутанным поведением при кросс-компиляции для 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, связывание завершается неудачно.Если потребуется дополнительная информация, не стесняйтесь спрашивать, я постараюсь уточнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...