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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bob2015
1 / 1 / 1
Регистрация: 18.09.2015
Сообщений: 26
#1

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

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

Есть библиотека из 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), то при сборке тестовой программы она мне радостно сообщает, что у меня есть ссылка на неопределенную функцию. Почему так? В чем ошибка и как ее исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2016, 22:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сборка статической библиотеки (C++):

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

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

Добавление статической библиотеки в проект - C++
Пользуюсь этим мануалом http://msdn.microsoft.com/ru-ru/library/ms235627.aspx Выполняя второй пункт, нажимаю add new Reference,...

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

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

Подключение статической библиотеки (libxls) - C++
Здравствуйте, недавно столкнулся с необходимостью читать из .xls файла, нашел для этого библиотеку libxls. В их readme написано, что они &quot;A...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
01.06.2016, 23:23 #4
Цитата Сообщение от bob2015 Посмотреть сообщение
Правильно?
Правильно. Так и делают.
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
01.06.2016, 23:30 #5
Цитата Сообщение от bob2015 Посмотреть сообщение
Получается я должен разместить несколько версий
Если интерфейс библиотеки на С++, то, как правило, да.
Цитата Сообщение от bob2015 Посмотреть сообщение
Или можно все-таки одну библиотеку использовать?
Можно, если сделать библиотеке C-совместимый интерфейс.

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

Добавлено через 6 минут
Просмотрел, что речь про статические библиотеки
Тогда небольшое уточнение. Обычно подружить не получится. Но, если сделать С-совместимый интерфейс, а саму библиотеку собрать в VS, то в новых версиях MinGW будет возможность ее подключить. Но не наоборот: *.a библиотеки VS не понимает.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
01.06.2016, 23:33 #6
Цитата Сообщение от DrOffset Посмотреть сообщение
то в новых версиях MinGW будет возможность ее подключить.
В MinGW добавили такую возможность? С какой версии?
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
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
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
02.06.2016, 00:06 #9
bob2015, так что, в случае статических библиотек лучше перекомпилировать под 10 компиляторов, чем приводить все в соответствие по ABI (даже если принять, что mingw будет способен такое слинковать). В случае dll есть рабочие варианты (ссылка в посте №5).
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
02.06.2016, 14:05 #10
DrOffset, я относительно недавно искал пути обхода этой проблемы, но так ничего внятного и не нашёл. Так что да, сейчас это вряд ли работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2016, 14:05
Привет! Вот еще темы с ответами:

Подключение статической lib-библиотеки - C++
есть lib sqlite3.lib однако при попытке использовать функции из sqlite3.lib получаю следующее 1&gt;msvcrt.lib(ti_inst.obj) : error...

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

Создание статической библиотеки в MinGw(code::blocks) - C++
Вопросы: 1. почему создаётся main.с , а не .cpp. Хочется писать на с++ 2. почему нет никаких .h файлов.как мне потом написать #include...

Компилятся ли библиотеки при статической линковке, если я их не использую? - C++
День всем добрый! Такой вопрос. К примеру, я подключил к проекту целую телегу хедеров, некоторые из которых я не использую. Если я...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.06.2016, 14:05
Ответ Создать тему
Опции темы

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