2014-12-26 3 views
0

Я хочу использовать статическую библиотеку, скомпилированную с Visual Studio 2013 в CodeBlocks + GCC. Но, к сожалению, у меня возникли проблемы с привязкой.Невозможно использовать статическую библиотеку VisualStudio с GCC

Затем я сделал этот пример кода, чтобы попытаться получить что-то работу:

#include <iostream>  
void HelloWorld()  
{  
std::cout << "Hello World !" << std::endl;  
}  

И я тоже написал заголовок:

#pragma once  
void HelloWorld();  

К сожалению, при попытке использовать его с GCC, компиляция заканчивается неудачей (издание ссылки). Visual Studio компилирует статические библиотеки как .lib-файлы, а все статические библиотеки в папке MinGW/GCC - это файлы .a. Я где-то читал, что .a - чистые статические библиотеки, когда .lib может быть статическими библиотеками или импортировать библиотеку (для использования DLL).

Тогда я не знаю, что мне теперь делать? Возможно, что-то в моем коде неверно? Я признаю, что я не знаком со статическими библиотеками, поскольку я тоже не обычный пользователь VisualStudio. Спасибо за помощь.

ответ

1

C++ ABI (Application Binary Interface) отличается от MSVC++ и gcc: вы не сможете вызывать функции C++ из объекта, встроенного в один компилятор и определенного в объекте, построенном с другим компилятором. Если вы хотите вызывать функцию между компиляторами, вам нужно пройти через интерфейс C (там - a C ABI в Windows) и скрыть соответствующие библиотеки времени выполнения компилятора в DLL.

+0

Означает ли это, что просто компилировать .lib-файлы как C-код, а не C++? Или это нечто более сложное? – MadMass

+0

Ну, это, конечно, более сложно: вам нужно создать подходящий интерфейс C, экспортировать соответствующие функции, а _not_ экспортировать другие. Я знаю, что эти вещи можно сделать с помощью DLL, и я думаю, что они не будут выполняться с использованием статической ссылки. Однако я лично не сделал необходимую настройку, т. Е. Я не знаю подробностей о том, как это сделать. –

Смежные вопросы