رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران
  • 1
Mohammad Rahbari Doust

افزودن کتابخانهٔ خارجی به Qt با CMake


سوال

سلام

من میخوام کتابخونه tz رو توی پروژه کیوت استفاده بکنم ولی لینک ارور میده .ظاهرا باید از cmake استفاده کرد اما بلد نیستم. منابع خوب و سریعی هم اگر دارید معرفی کنید . تشکر

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

1 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 2
در 11 ساعت قبل، Mohammad Rahbari Doust گفته است :

سلام

من میخوام کتابخونه tz رو توی پروژه کیوت استفاده بکنم ولی لینک ارور میده .ظاهرا باید از cmake استفاده کرد اما بلد نیستم. منابع خوب و سریعی هم اگر دارید معرفی کنید . تشکر

سلام،

خطای لینکر مبنی بر این است که فایل ساخته شدهٔ کتابخانه قابل شناسایی نیست.

قبل از هر چیز دستورات زیر را به ترتیب برای کامپایل (ساخت) کتابخانهٔ tz اجرا کنید تا فایل‌ libtz.a ساخته شود.

mkdir build
cd build
cmake ../
cmake -DENABLE_DATE_TESTING=ON --build .
make

در نهایت وارد یک پروژهٔ جدید بشید تا برای افزودن کتابخانه به صورت زیر عمل کنید:

  1. فایل libtz.a را در یک پوشه‌‌ای با نام lib و محتوای کتابخانه را در پوشه‌ای با نام include در کنار پروژهٔ خودتان قرار دهید.
  2. به دلیل اینکه این کتابخانه وابستهٔ کتابخانهٔ curl است، مطمئن شوید که آن نیز بر روی سیستم شما نصب باشد.

دستورات زیر را در سی‌میک برای افزودن کتابخانهٔ libtz بنویسید.

add_library( date ${CMAKE_CURRENT_SOURCE_DIR}/include )
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
target_link_libraries(${PROJECT_NAME} PRIVATE tz)

احتمالاً خطایی برای عدم توانایی لینک‌سازی با curl دریافت کنید، در این صورت دستورات زیر را در سی‌میک اضافه کنید:

FIND_PACKAGE(CURL)
IF(CURL_FOUND)
  INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
  SET(requiredlibs ${requiredlibs} ${CURL_LIBRARIES} )
ELSE(CURL_FOUND)
  MESSAGE(FATAL_ERROR "Could not find the CURL library and development files.")
ENDIF(CURL_FOUND)

target_link_libraries(${PROJECT_NAME} PRIVATE curl)

یک مثال از پروژه‌ای که من libtz را همراه کیوت ادغام کردم:

cmake_minimum_required(VERSION 3.5)

project(HelloCMake LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt5 COMPONENTS Widgets REQUIRED)

FIND_PACKAGE(CURL)
IF(CURL_FOUND)
  INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
  SET(requiredlibs ${requiredlibs} ${CURL_LIBRARIES} )
ELSE(CURL_FOUND)
  MESSAGE(FATAL_ERROR "Could not find the CURL library and development files.")
ENDIF(CURL_FOUND)

add_library( date ${CMAKE_CURRENT_SOURCE_DIR}/include )
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)

if(ANDROID)
  add_library(HelloCMake SHARED
    main.cpp
    mainwindow.cpp
    mainwindow.hpp
    mainwindow.ui
  )
else()
  add_executable(HelloCMake
    main.cpp
    mainwindow.cpp
    mainwindow.hpp
    mainwindow.ui
  )
endif()

target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets)
target_link_libraries(${PROJECT_NAME} PRIVATE tz)
target_link_libraries(${PROJECT_NAME} PRIVATE curl)

بعد از این نباید در زمان کامپایل خطایی رُخ دهد. موفق باشید!

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...