Почему я не могу связать библиотеку "xlnt"? - PullRequest
0 голосов
/ 27 марта 2020

Я искал ТАК и нашел несколько похожих вопросов, но ничего в ответах мне не помогло.
Я ни в коем случае не опытный c++ программист, и мне кажется, что я ' Я бью кирпичную стену этой библиотекой.
Хотя я не хочу бросать это, я хочу научиться делать это.
Я что-то упускаю из основы c?

Мои шаги по созданию xlnt библиотеки :

  1. cmake .. источника xlnt
  2. сборки с MSVS 2019 как Release x64

Пример тестового кода :

#include "xlnt/xlnt.hpp"

int main()
{
    xlnt::workbook wb;
    xlnt::worksheet ws = wb.active_sheet();
    ws.cell("A1").value(5);
    ws.cell("B2").value("string data");
    ws.cell("C3").formula("=RAND()");
    wb.save("example.xlsx");
    return 0;
}

Свойства проекта с каталогами .hpp и .lib : enter image description here

Свойства проекта с зависимостями :
(я также скопировал xlnt.dll в root моего проекта) enter image description here

Ошибки, возникающие при попытке запустить код:

1>------ Build started: Project: xlnt-test, Configuration: Release x64 ------
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::exception::`vftable'" (??_7exception@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::illegal_character::`vftable'" (??_7illegal_character@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::invalid_attribute::`vftable'" (??_7invalid_attribute@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::invalid_cell_reference::`vftable'" (??_7invalid_cell_reference@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::invalid_column_index::`vftable'" (??_7invalid_column_index@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::invalid_data_type::`vftable'" (??_7invalid_data_type@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::invalid_file::`vftable'" (??_7invalid_file@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::invalid_parameter::`vftable'" (??_7invalid_parameter@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::invalid_sheet_title::`vftable'" (??_7invalid_sheet_title@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::detail::izstream::`vftable'" (??_7izstream@detail@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::key_not_found::`vftable'" (??_7key_not_found@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::missing_number_format::`vftable'" (??_7missing_number_format@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::no_visible_worksheets::`vftable'" (??_7no_visible_worksheets@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::detail::ozstream::`vftable'" (??_7ozstream@detail@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::unhandled_switch_case::`vftable'" (??_7unhandled_switch_case@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::unsupported::`vftable'" (??_7unsupported@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::detail::vector_istreambuf::`vftable'" (??_7vector_istreambuf@detail@xlnt@@6B@)
1>xlnt.exp : error LNK2001: unresolved external symbol "const xlnt::detail::vector_ostreambuf::`vftable'" (??_7vector_ostreambuf@detail@xlnt@@6B@)
1>D:\Docs\Programming\cpp\xlnt-test\x64\Release\xlnt-test.exe : fatal error LNK1120: 18 unresolved externals
1>Done building project "xlnt-test.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

1 Ответ

1 голос
/ 27 марта 2020

Я проверил библиотеку для вас. Это работает после этого:

  1. Загрузка исходного кода с официального сайта здесь
  2. Создание нового проекта VS с CMake
  3. Создание нового exe c project (MyTestApplication)
  4. Установка дополнительных включаемых каталогов (в моем случае G:\CMake\Sources\xlnt-master\include)
  5. В режиме debug генерируемая библиотека называется xlntd.lib (с суффиксом d)

    • Добавить ..\source\$(Configuration)\xlntd.lib при Linker -> Input
    • $ (Конфигурация) = Debug в режиме отладки
    • Вы также можете определить ..\source\$(Configuration)\ в качестве дополнительных библиотечных каталогов и указать только xlntd.lib в качестве входной библиотеки
  6. В режиме Release генерируемая библиотека называется xlnt.lib

    • Добавить ..\source\$(Configuration)\xlnt.lib в Linker -> Input
    • $ (Конфигурация) = Release в режиме выпуска
    • Вы также можете определить ..\source\$(Configuration)\ в качестве дополнительных библиотечных каталогов и просто введите xlnt.lib в качестве входных данных lib

enter image description here

После этого, это должно быть OK:

* 1 066 *enter image description here

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