Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
bob2015
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
01.06.2016, 22:19     Сборка статической библиотеки #1
Есть библиотека из 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), то при сборке тестовой программы она мне радостно сообщает, что у меня есть ссылка на неопределенную функцию. Почему так? В чем ошибка и как ее исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
01.06.2016, 22:23     Сборка статической библиотеки #2
Цитата Сообщение от bob2015 Посмотреть сообщение
Почему так?
Потому что собранные с помощью MinGW библиотеки не подходят для Visual Studio.

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

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

Правильно? Или можно все-таки одну библиотеку использовать?
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
01.06.2016, 23:23     Сборка статической библиотеки #4
Цитата Сообщение от bob2015 Посмотреть сообщение
Правильно?
Правильно. Так и делают.
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
01.06.2016, 23:30     Сборка статической библиотеки #5
Цитата Сообщение от bob2015 Посмотреть сообщение
Получается я должен разместить несколько версий
Если интерфейс библиотеки на С++, то, как правило, да.
Цитата Сообщение от bob2015 Посмотреть сообщение
Или можно все-таки одну библиотеку использовать?
Можно, если сделать библиотеке C-совместимый интерфейс.

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

Добавлено через 6 минут
Просмотрел, что речь про статические библиотеки
Тогда небольшое уточнение. Обычно подружить не получится. Но, если сделать С-совместимый интерфейс, а саму библиотеку собрать в VS, то в новых версиях MinGW будет возможность ее подключить. Но не наоборот: *.a библиотеки VS не понимает.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
01.06.2016, 23:33     Сборка статической библиотеки #6
Цитата Сообщение от DrOffset Посмотреть сообщение
то в новых версиях MinGW будет возможность ее подключить.
В MinGW добавили такую возможность? С какой версии?
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
02.06.2016, 00:01     Сборка статической библиотеки #7
Цитата Сообщение от castaway Посмотреть сообщение
С какой версии?
Точно не скажу, но уже в 2009 году я пользовался этой возможностью.

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

Добавлено через 11 минут
castaway, справедливости ради, добавлю, что у меня не получилось сейчас слинковать lib от VS 2013 к mingw 5.3. Хоть я и нашел подтверждение своим словам на сайте mingw (кстати от 2009 года как раз), тем не менее, похоже сейчас это скорее не работает.
bob2015
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
02.06.2016, 00:04  [ТС]     Сборка статической библиотеки #8
Какими компиляторами обычно пользуются при разработке под Windows? msvc, mingw, etc?
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
02.06.2016, 00:06     Сборка статической библиотеки #9
bob2015, так что, в случае статических библиотек лучше перекомпилировать под 10 компиляторов, чем приводить все в соответствие по ABI (даже если принять, что mingw будет способен такое слинковать). В случае dll есть рабочие варианты (ссылка в посте №5).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2016, 14:05     Сборка статической библиотеки
Еще ссылки по теме:

Подключение статической lib-библиотеки C++
Создание статической библиотеки в DEV C++ C++
Подключение статической библиотеки в dev c++ C++

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
02.06.2016, 14:05     Сборка статической библиотеки #10
DrOffset, я относительно недавно искал пути обхода этой проблемы, но так ничего внятного и не нашёл. Так что да, сейчас это вряд ли работает.
Yandex
Объявления
02.06.2016, 14:05     Сборка статической библиотеки
Ответ Создать тему
Опции темы

Текущее время: 23:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru