GCC компилирует dll с __stdcall - PullRequest
       18

GCC компилирует dll с __stdcall

8 голосов
/ 20 сентября 2008

Когда мы компилируем dll, используя __stdcall в Visual Studio 2008, имена скомпилированных функций внутри dll:

FunctionName

Хотя, когда мы компилируем одну и ту же dll, используя GCC, используя wx-dev-cpp, GCC добавляет количество параметров, которое имеет функция, поэтому имя функции, использующей обходчик зависимости, выглядит следующим образом.

FunctionName @ numberOfParameters или == FunctionName @ 8

Как вы скажете компилятору GCC удалить @nn из экспортированных символов в dll?

Ответы [ 3 ]

6 голосов
/ 31 октября 2008

Просто используйте -Wl,--kill-at в командной строке gcc, которая передаст компоновщик --kill-at.

Ссылки:

5 голосов
/ 20 сентября 2008

__stdcall украшает имя функции, добавляя подчеркивание в начало и количество байтов параметров в конце (разделенных @).

Итак, функция:

void __stdcall Foo(int a, int b);

... станет _Foo@8.

Если вы перечислите имя функции (без отделки) в разделе EXPORTS вашего .DEF-файла, оно будет экспортировано без оформления.

Возможно, в этом разница?

1 голос
/ 10 июня 2014

Вы также можете использовать -Wl,--add-stdcall-alias для настроек компоновщика в GCC. Это обеспечит присутствие обоих имен функций (оформленных и неокрашенных), которые можно использовать как псевдоним.

...