Проблема изменения/экспорта с Mingw

Я работаю над общей C++ DLL, используя Netbeans и MinGW под Windows.

Мой первый вопрос: будет ли манипулирование различаться между MinGW и Microsoft Visual C++? Я читал, что искажение зависит от компилятора - это правда? Мне нужно получить с помощью MinGW то же искажение, что и с MVC++, возможно ли это когда-либо?

С помощью Dependency Walker я обнаружил, что экспортируемые функции также отображаются как C (и в моем коде они не экспортируются как C). Зависит ли это от ограничения DepWalker или по какой-то причине MinGW экспортирует мою библиотеку как C? (Я убедился, что с помощью «экспорта C» я больше не вижу искажений, а без них я вижу искажение имен (что отличается от того, что я ожидал на основе MVC++), но я все еще вижу значок «C» вместо «C++ ".

Вот команда связывания:

g++.exe -static-libgcc -static-libstdc++ -shared -o my.dll -s 1.o 2.o ... n.o other.dll -static

Заранее спасибо и с наилучшими пожеланиями.


person JoeSlav    schedule 21.02.2011    source источник


Ответы (1)


Да, изменение имени зависит от компилятора. Он может даже меняться между версиями одного и того же компилятора.

Вы никогда не должны ничего ожидать от искажения и должны относиться к нему как к черному ящику - никогда не полагайтесь на то, что это то же самое или другое.

Если вам нужна связь между компиляторами, используйте extern "C".

person sharptooth    schedule 21.02.2011
comment
Оно может даже меняться между версиями — в этом случае (с использованием MSVC) изменение имени изменилось между версиями. Если MinGW соответствует VC6, он не будет соответствовать VC2010, и наоборот. - person MSalters; 21.02.2011