Привет, я скачал TDLib на Windows вместе с Qt6. До этого сделал проект-приложение для работы с сессиями, но только делал это всё на Arch Linux. Потом решил скомпилировать проект под Windows, скачал виртуалку, перенёс проект, и тут я сталкиваюсь с проблемой:
C:\Users\Tabyretka\Desktop\main\zxc\main\tdapp.cpp:29: ошибка: undefined reference to `td::ClientManager::execute(td::tl::unique_ptr<td::td_api::Function>&&)'
Есть догадка - я работал сначала с версией 1.8.50, а на Windows уже скачал 1.8.51 версию TDLib. Точнее не знаю, влияет ли эта версия на другую, но думаю, не особо, так как в GitHub всё по-прежнему.
Вероятно, проблема в некорректных путях в CMakeLists.txt — где-то моя невнимательность сыграла роль.
Если нужна еще инфа - пришлю
Вот мой CMakeLists.txt:
cmake_minimum_required(VERSION 3.19)
project(TEMP_HexSpam LANGUAGES CXX)
set(TD_LIB_PATH "C:/Users/Tabyretka/Desktop/main/td/tdlib")
set(Td_DIR "${TD_LIB_PATH}/lib/cmake/Td")
list(APPEND CMAKE_PREFIX_PATH "${Td_DIR}")
find_package(Qt6 6.5 REQUIRED COMPONENTS Core Widgets)
find_package(Qt6 REQUIRED COMPONENTS Core)
find_package(Td 1.8.51)
qt_standard_project_setup()
qt_add_executable(TEMP_HexSpam
WIN32 MACOSX_BUNDLE
main.cpp
main/mainwindow.cpp
main/include/mainwindow.h
main/include/tdapp.h
main/tdapp.cpp
main/mainwindow.ui
src/include/authinput.h
src/authinput.cpp
src/include/core.h
src/core.cpp
)
target_link_libraries(TEMP_HexSpam
PRIVATE
Qt::Core
Qt::Widgets
Td::TdStatic
)
target_link_libraries(TEMP_HexSpam PRIVATE Qt6::Core)
set_property(TARGET TEMP_HexSpam PROPERTY CXX_STANDARD 17)
include(GNUInstallDirs)
install(TARGETS TEMP_HexSpam
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
qt_generate_deploy_app_script(
TARGET TEMP_HexSpam
OUTPUT_SCRIPT deploy_script
NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})
Вот часть, где эта проблема (tdapp.cpp):
TdApp::TdApp() {
td::ClientManager::execute(
td_api::make_object<td_api::setLogVerbosityLevel>(1));
client_manager_ = std::make_unique<td::ClientManager>();
client_id_ = client_manager_->create_client_id();
send_query(td_api::make_object<td_api::getOption>("version"), {});
}
Вот часть с .h:
private:
using Object = td_api::object_ptr<td_api::Object>;
std::unique_ptr<td::ClientManager> client_manager_;
std::int32_t client_id_{0};