CMake не может правильно связать сверхлегкие пользовательские интерфейсы с исполняемым файлом в Clion 2019.1.2 - PullRequest
0 голосов
/ 22 мая 2019

Привет, я пытаюсь создать базовое приложение, используя сверхлегкий https://github.com/ultralight-ux/Ultralight. Однако сборка не выполняется на этапе компоновки.Я прошел через множество других ответов и не получил никакого прогресса.

Ошибка Cmake:

C:/Users/AMWAJ-PC/Desktop/untitled1/main.cpp:10: undefined reference to `__imp__ZN10ultralight3App6CreateEv'

C:/Users/AMWAJ-PC/Desktop/untitled1/main.cpp:11: undefined reference to `__imp__ZN10ultralight6Window6CreateEPNS_7MonitorEjjbj'
C:/Users/AMWAJ-PC/Desktop/untitled1/main.cpp:14: undefined reference to `__imp__ZN10ultralight7Overlay6CreateENS_3RefINS_6WindowEEEjjii'
C:/Users/AMWAJ-PC/Desktop/untitled1/main.cpp:15: undefined reference to `__imp__ZN10ultralight6StringC1EPKc'
C:/Users/AMWAJ-PC/Desktop/untitled1/main.cpp:15: undefined reference to `__imp__ZN10ultralight6StringD1Ev'
C:/Users/AMWAJ-PC/Desktop/untitled1/main.cpp:15: undefined reference to `__imp__ZN10ultralight6StringD1Ev'

Cmakelist.txt

cmake_minimum_required(VERSION 3.14)
project(untitled1)
set(CMAKE_CXX_STANDARD 17)

set(INCLUDE_DIRS "C:/C++/ultralight_ui/include/")
set(LINK_DIRS "C:/C++/ultralight_ui/lib/")
include_directories("${INCLUDE_DIRS}")
find_library(
    ULTRA_LIB
    NAMES UltralightCore AppCore Ultralight WebCore
    HINTS "${LINK_DIRS}")

add_executable(untitled1 main.cpp)
target_link_libraries(untitled1 ${ULTRA_LIB})

main.cpp

#include <AppCore/App.h>
#include <AppCore/Window.h>
#include <AppCore/Overlay.h>

using namespace ultralight;

int main()
{

auto app = App::Create();
auto window = Window::Create(app->main_monitor(), 300, 300, false, kWindowFlags_Titled);
window->SetTitle("Tutorial 2 - Basic App");
app->set_window(window);
auto overlay = Overlay::Create(window, window->width(), window->height(), 0, 0);
overlay->view()->LoadHTML("<center>Hello World!</center>");
app->Run();

return 0;
}

Любая помощь принесет мне большую пользу :) Спасибо

1 Ответ

1 голос
/ 22 мая 2019

Вы неправильно используете параметр NAMES для find_library: этот параметр содержит список альтернатив , и find_library приведет только к одиночной библиотеке , которая имеет одну изэти имена.

Если вы хотите, чтобы было найдено несколько библиотек, вам нужно выполнить несколько команд find_library, каждая со своим именем (и своей переменной):

find_library(
    ULTRA_LIB_CORE
    NAMES UltralightCore
    HINTS ${LINK_DIRS})

find_library(
    ULTRA_LIB_APP_CORE
    NAMES AppCore
    HINTS ${LINK_DIRS})

find_library(
    ULTRA_LIB
    NAMES Ultralight
    HINTS ${LINK_DIRS})

find_library(
    ULTRA_LIB_WEB_CORE
    NAMES WebCore
    HINTS ${LINK_DIRS})

...

target_link_libraries(untitled1
    ${ULTRA_LIB_CORE} ${ULTRA_LIB_APP_CORE} ${ULTRA_LIB} ${ULTRA_LIB_WEB_CORE}
)
...