Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
1

Сборка статической библиотеки

01.06.2016, 22:19. Показов 4166. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть библиотека из 2 следующих файлов:

C++
1
2
3
4
5
6
7
8
//mylib.h
 
#ifndef __MYLIB_H__
#define __MYLIB_H__
 
void hello();
 
#endif
C++
1
2
3
4
5
6
7
8
9
//mylib.cpp
 
#include <iostream>
#include "mylib.h"
 
void hello()
{
    std::cout << "hello" << "\n\n";
}
Программа, которая использует эту библиотеку:


C++
1
2
3
4
5
6
7
#include "mylib.h"
 
int main()
{
    hello();
    return 0;
}
В чем проблема? Собрал библиотеку в cygwin с помощью mingw-x86-64, вот так:

Bash
1
2
3
$ x86_64-w64-mingw32-g++.exe -c -static-libstdc++ -static-libgcc mylib.cpp
$ ar rc mylib.lib mylib.o
$ ranlib mylib.lib
Теперь после того, как собираю тестовую программу в cygwin все ок. Но если я подключаю полученную mingw-ом библиотеку к visual studio (2012), то при сборке тестовой программы она мне радостно сообщает, что у меня есть ссылка на неопределенную функцию. Почему так? В чем ошибка и как ее исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2016, 22:19
Ответы с готовыми решениями:

Физический движок Box2d, сборка статической библиотеки
Здравствуйте. Я новичок и решил впервые собрать статическую библиотеку из Box2D. При первой...

Создание статической библиотеки
Вообщем надо создать статическую библиотеку lib для классов. Классов очень много и они разбиты по...

Подключение статической библиотеки в VS
Скачал проект, он использует x.lib. В свойствах проекта, в разделе Linker, поле Additional Library...

Создание статической библиотеки lib
Привет всем решил попробовать создать статическую библиотеку и связать её с каким-нибудь...

9
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.06.2016, 22:23 2
Цитата Сообщение от bob2015 Посмотреть сообщение
Почему так?
Потому что собранные с помощью MinGW библиотеки не подходят для Visual Studio.

Цитата Сообщение от bob2015 Посмотреть сообщение
и как ее исправить?
Собери библиотеку в Visual Studio.
1
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
01.06.2016, 23:20  [ТС] 3
А если я хочу выложить эту библиотеку на своем сайте, чтобы каждый мог ее загрузить и пользоваться ей. При этом я человек заботливый и не хочу чтобы загрузивший сам компилировал исходники. Получается я должен разместить несколько версий:

библиотека для x86-64 для среды разработка Visual Studio
библиотека для x86-64 для среды разработки Mingw
...

Правильно? Или можно все-таки одну библиотеку использовать?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.06.2016, 23:23 4
Цитата Сообщение от bob2015 Посмотреть сообщение
Правильно?
Правильно. Так и делают.
1
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
01.06.2016, 23:30 5
Цитата Сообщение от bob2015 Посмотреть сообщение
Получается я должен разместить несколько версий
Если интерфейс библиотеки на С++, то, как правило, да.
Цитата Сообщение от bob2015 Посмотреть сообщение
Или можно все-таки одну библиотеку использовать?
Можно, если сделать библиотеке C-совместимый интерфейс.

+ см. вот эту тему.

Добавлено через 6 минут
Просмотрел, что речь про статические библиотеки
Тогда небольшое уточнение. Обычно подружить не получится. Но, если сделать С-совместимый интерфейс, а саму библиотеку собрать в VS, то в новых версиях MinGW будет возможность ее подключить. Но не наоборот: *.a библиотеки VS не понимает.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.06.2016, 23:33 6
Цитата Сообщение от DrOffset Посмотреть сообщение
то в новых версиях MinGW будет возможность ее подключить.
В MinGW добавили такую возможность? С какой версии?
1
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
02.06.2016, 00:01 7
Цитата Сообщение от castaway Посмотреть сообщение
С какой версии?
Точно не скажу, но уже в 2009 году я пользовался этой возможностью.

Добавлено через 6 минут
bob2015, только имей в виду, что возможность слинковать это в один бинарник не решит всех проблем. Остается еще проблема бинарной совместимости. Такой код должен быть написан с учетом этого.

Добавлено через 11 минут
castaway, справедливости ради, добавлю, что у меня не получилось сейчас слинковать lib от VS 2013 к mingw 5.3. Хоть я и нашел подтверждение своим словам на сайте mingw (кстати от 2009 года как раз), тем не менее, похоже сейчас это скорее не работает.
2
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
02.06.2016, 00:04  [ТС] 8
Какими компиляторами обычно пользуются при разработке под Windows? msvc, mingw, etc?
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
02.06.2016, 00:06 9
bob2015, так что, в случае статических библиотек лучше перекомпилировать под 10 компиляторов, чем приводить все в соответствие по ABI (даже если принять, что mingw будет способен такое слинковать). В случае dll есть рабочие варианты (ссылка в посте №5).
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
02.06.2016, 14:05 10
DrOffset, я относительно недавно искал пути обхода этой проблемы, но так ничего внятного и не нашёл. Так что да, сейчас это вряд ли работает.
0
02.06.2016, 14:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2016, 14:05
Помогаю со студенческими работами здесь

Подключение статической lib-библиотеки
есть lib sqlite3.lib однако при попытке использовать функции из sqlite3.lib получаю следующее...

Создание статической библиотеки в DEV C++
Прошу помочь мне с созданием статической библиотеки в DEV C++. В общем, я попытался создать ее...

Подключение статической библиотеки в dev c++
Подскажите пожалуйста как подключить библиотеку к проекту где она будет использоваться? Я...

Подключение статической библиотеки (libxls)
Здравствуйте, недавно столкнулся с необходимостью читать из .xls файла, нашел для этого библиотеку...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru