Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Как сослаться на библиотеку расширения .a в проекте Visual Studio?

#cpp #visual_studio


Есть проект libjson-rpc-cpp .
Готовый фреймворк для Windows содержит в себе библиотеки расширения ".a" . Как написано,
они тестили проект на Windows 7 при помощи MinGW32.  

Каким образом мне можно подключить эти библиотеки к с++ проекту в VS? 
Стандартными способами, которыми я подключаю библиотеки расширения .lib эти библиотеки
(.a) не подключаются. То есть VS ругается на неразрешённый внешний символ.

Ошибка  9   error LNK2019: ссылка на неразрешенный внешний символ
"public: __thiscall jsonrpc::HttpClient::HttpClient(class
std::basic_string,class
std::allocator > const &)" (??0HttpClient@jsonrpc@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 
в функции _wmain    E:\Projects\A1CF service projects\A1CF service


У меня такое уже было. Решил вопрос, добавив исходники нужные в проект. 

В итоге, вопросы:


Эти библиотеки (.a) реально использовать не на Linux?
Эти библиотеки (.a) собраны при помощи MinGW?
Каким образом их можно использовать в проекте  VC++? Может быть можно конвертировать
или скомпилировать заново, чтобы сгенерировались .lib файлы? 


На Ubuntu я выкачал из git проект, собрал его. Думаю, можно изменить параметры CmakeLists.txt,
чтобы генерировались .lib файлы. 
Но мб можно без этого использовать файлы .a расширения сразу в VC++ проекте?
    


Ответы

Ответ 1



Использовать библиотеки C++, которые собраны другим компилятором, в общем случае, нельзя. У разных компиляторов могут быть разные имена(name mangling) и т.п. Поэтому нельзя даже использовать библиотеку, которая была собрана в другой версии MSVC. Про MinGW я вообще молчу. Выход здесь это собрать библиотеку самостоятельно. Для этого нужно запустить cmake с нужным генератором. Список всех генераторов можно получить, запустив cmake без параметров в консоли. Вот так, к примеру, как будет выглядеть генерация solution для MSVC2013 x64: cmake -G "Visual Studio 12 Win64"

Ответ 2



Статическая библиотека .a, может быть использована только с MinGW32, т.к. создана им. Для использования Visual Studio вам необходимо собрать проект в Visual Studio. Также если у вас есть динамическая библиотека (dll) этого проекта вы можете создать из неё lib файл (инструкция: http://unick-soft.ru/article.php?id=56)

Комментариев нет:

Отправить комментарий