Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
igdev
74 / 63 / 27
Регистрация: 22.04.2016
Сообщений: 359
Завершенные тесты: 3
#1

Не линкуются функции из библиотеки

11.02.2018, 16:27. Просмотров 825. Ответов 13
Метки нет (Все метки)

В общем, захотелось мне что-нибудь написать используя библиотеку gitlib2.
Загрузил исходники и прошелся по шагам инструкции , чтобы собрать эту либу под Visual Studio 2013, как статическую.
Таким образом, для того, чтобы собрать эту либу CMake'ом в консоли я ввел следующую строку:
Код
cmake -G"Visual Studio 12 Win64" -DBUILD_SHARED_LIBS=OFF -DBUILD_CLAR=OFF -DSTATIC_CRT=ON ..
Получил следующий результат:
Не линкуются функции из библиотеки


Не линкуются функции из библиотеки


Меня немного смущает, то, что так много различных компонентов оно не нашло.
Погуглил и я как понял, эти недостающиеся компоненты нужны для Линукса и Мака,
для Винды они не нужны (поправте, если не прав).
А сообщения выводятся из-за того, что данная либа кроссплатформенна.

Далее в консоли я ввел:
Код
cmake --build .
Либа собралась. Ошибок не было.

Далее, согласно инструкции , подключил либу к проекту.
Все необходимые заголовочные файлы видны, а также все типы и функции из библиотеки.

Написал небольшой примерчик для того, чтобы проверить, что все дейстивительно хорошо и подключенная библиотека работает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include "git2.h"
 
int main()
{
 
    std::string url;
    std::string path;
 
    std::cout << "enter url: ";
    std::cin >> url;
 
    std::cout << "enter path: ";
    std::cin >> path;
 
    git_repository *repo = NULL;
    int ret = git_clone(&repo, url.c_str(), path.c_str(), NULL);
    git_repository_free(repo);
 
    return 0;
}
Пытаюсь собрать проект, но на этапе линковки прилетают следующие ошибки:
Код
error LNK2019: ссылка на неразрешенный внешний символ _git_repository_free в функции _main
error LNK2019: ссылка на неразрешенный внешний символ _git_clone в функции _main
error LNK1120: неразрешенных внешних элементов: 2
В чем может быть причина? Как можно это исправить? Это из-за того, что какие-то элементы не найдены на этапе сборки либы?
Поделитесь, пожалуйста, ссылкой, советом, как можно решить данную проблему?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2018, 16:27
Ответы с готовыми решениями:

Вызов функции одной динамической библиотеки из другой динамической библиотеки
Добрый день! Помогите пожалуйста разобраться со следующим вопросом. Возможно ли из одной...

стандартные функции библиотеки <string.h>
Здравствуйте, товарищи порграммисты :gsmile: Помогите, пожалуйста, с написанием програмки на...

Подключение выбранной функции из библиотеки
Можно подключить одну функцию из библиотеки, не подключаю всю библиотеку?

Отлов функции с другой библиотеки
Здравствуйте. У меня есть своя библиотека,мне нужно с помощью неё отловить участок кода или...

Компилятор не видит функции из библиотеки AlgLib
Здравствуйте. Добавил к проекту &quot;fasttransforms.h&quot;. Само имя библиотеки не вызывает ошибок, но не...

13
1Вирт1
152 / 181 / 43
Регистрация: 25.08.2011
Сообщений: 742
Завершенные тесты: 5
11.02.2018, 16:32 #2
здравствуйте а пути к либе прописали?
0
igdev
74 / 63 / 27
Регистрация: 22.04.2016
Сообщений: 359
Завершенные тесты: 3
11.02.2018, 16:39  [ТС] #3
1Вирт1, если Вы говорите об этом, то да.
Не линкуются функции из библиотеки


Не линкуются функции из библиотеки


Не линкуются функции из библиотеки
0
1Вирт1
152 / 181 / 43
Регистрация: 25.08.2011
Сообщений: 742
Завершенные тесты: 5
11.02.2018, 16:46 #4
C++
1
#pragma comment(lib, "gitlib2.lib")
а так?
0
igdev
74 / 63 / 27
Регистрация: 22.04.2016
Сообщений: 359
Завершенные тесты: 3
11.02.2018, 19:37  [ТС] #5
1Вирт1, Если написать так:
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma comment(lib, "gitlib2.lib")
#include <iostream>
#include <string>
#include "git2.h"
 
 
int main()
{
        // Код
    return 0;
}
То получаю, следующее сообщение:
Код
error LNK1104: не удается открыть файл "gitlib2.lib"
Если же написать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma comment(lib, "git2.lib")
#include <iostream>
#include <string>
#include "git2.h"
 
 
int main()
{
        // Код
    return 0;
}
То получаю все те же ошибки, что я описывал в начале темы.

Добавлено через 2 часа 45 минут
up.
0
Ygg
773 / 241 / 100
Регистрация: 10.02.2018
Сообщений: 563
11.02.2018, 19:43 #6
igdev, может либа 64х битная собрана, а проект 32х битный?
1
igdev
74 / 63 / 27
Регистрация: 22.04.2016
Сообщений: 359
Завершенные тесты: 3
11.02.2018, 21:16  [ТС] #7
Ygg, Собирал и как для х64 и как для х86. Результат одинаковый. А вообще, я был бы очень рад, если кто-то попробует у себя собрать либу и протестировать код, который я указывал в начале темы. Вдруг, я что-то пропускаю каждый раз. Так мне было бы проще найти ошибку у себя. А то уже неделю не могу побороть данную проблему.
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,042
11.02.2018, 22:12 #8
Цитата Сообщение от igdev Посмотреть сообщение
если кто-то попробует у себя собрать либу и протестировать код, который я указывал в начале темы.
Собрал (для 10-й, Debug, Win32), протестировал (скомпилировал) код.

Добавлено через 5 минут
В командной строке: D:\temp>"%CMake%/cmake" -G "Visual Studio 10 2010" -DBUILD_CLAR=OFF D:\Programs\libgit2-0.26.0\libgit2-0.26.0
Потом открыл студией созданное через cmake решение (libgit2.sln), собрал (в папке Debug создались либы), подключил git2.lib к проекту с выложенным кодом.
1
Ygg
773 / 241 / 100
Регистрация: 10.02.2018
Сообщений: 563
11.02.2018, 23:01 #9
Лучший ответ Сообщение было отмечено igdev как решение

Решение

Тоже собралось и работает, под 11 студией. DLL без вопросов, для статика ещё в зависимости прописать "Rpcrt4.lib; Crypt32.lib; Winhttp.lib" и тоже всё собирается. Дело, наверное, в сборке libgit через проект для студии, а не через "make --build"
1
igdev
74 / 63 / 27
Регистрация: 22.04.2016
Сообщений: 359
Завершенные тесты: 3
11.02.2018, 23:31  [ТС] #10
Ygg, с какими флагами в cmake Вы собирали? С теме, что я указал?
0
igdev
74 / 63 / 27
Регистрация: 22.04.2016
Сообщений: 359
Завершенные тесты: 3
11.02.2018, 23:44  [ТС] #11
Хм, проделал все так же само, как и описвал в самом начале темы, но добавил зависимостях либы: "Rpcrt4.lib; Crypt32.lib; Winhttp.lib".
И все собралось!
Это радует, однако мне не нравится, что при попытке запустить *.exe файл или пошаговую отладку вылетает следующая ошибка:
Не линкуются функции из библиотеки

Как можно исправить? Куда необходимо добавить git2.dll, чтобы избавиться от этой ошибки?
0
igdev
74 / 63 / 27
Регистрация: 22.04.2016
Сообщений: 359
Завершенные тесты: 3
11.02.2018, 23:48  [ТС] #12
Вроде, разобрался. Ошибка исчезла. Решил проблему так:
Не линкуются функции из библиотеки

Поправте, если я сделал не правильно.
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,042
12.02.2018, 00:09 #13
Цитата Сообщение от igdev Посмотреть сообщение
Куда необходимо добавить git2.dll, чтобы избавиться от этой ошибки?
Смотря откуда запускаешь. Если из студии, то в папку проекта, если непосредственно .exe, то в папку с .exe.
1
Ygg
773 / 241 / 100
Регистрация: 10.02.2018
Сообщений: 563
12.02.2018, 00:28 #14
Цитата Сообщение от igdev Посмотреть сообщение
с какими флагами в cmake Вы собирали? С теме, что я указал?
Сперва без аргументов, но тогда после сборки выходит LIB плюс DLL.
Потом с вашими аргументами, почти, получается чистая LIB без DLL.
Код
cmake -DBUILD_SHARED_LIBS=OFF -DBUILD_CLAR=OFF -DSTATIC_CRT=ON ..
Но во втором случае, при сборке уже исполняемого файла, выскакивает ошибка линковки. По списку отсутствующих функций в логах получилось, что нужно добавить три указанных мной выше либы. После этого всё заработало, без DLL.
1
12.02.2018, 00:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2018, 00:28

Подскажите библиотеки, функции по управлению потоками
Прошу помогите! Подскажите библиотеки, функции по управлению потоками( созданию) либо какую...

Библиотеки для построения графика функции
Здравствуйте, уважаемые форумчане) Подскажите, пожалуйста, аналог для построение графиков в matlab....

Непонятны разные функции библиотеки cctype
Код #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;cctype&gt; void strcount(const std::string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru