Есть ли что-нибудь, чтобы изменить схему искажения имени экспорта в GCC? - PullRequest
7 голосов
/ 09 ноября 2009

Я пытаюсь построить проект, который у меня есть, и в нем есть несколько экспортируемых функций. Функции следуют соглашению stdcall, и они будут искажены, если скомпилированы с GCC как

Func@X

Другие компиляторы искажают имя следующим образом:

_Func@X

Можно ли каким-либо образом заставить GCC изменять имена экспортируемых функций для более позднего примера?

Ответы [ 3 ]

4 голосов
/ 10 ноября 2009

См. этот ответ .

int Func() __asm__("_Func@X");

Это заставит GCC назвать символ _Func@X независимо от того, что он сделал бы нормально.


Да, @ особенный: он используется для управления версиями символов. Я думал, что __asm__("...@...") раньше работал, но я думаю, что это больше не так.

int Func() __asm__("_Func");
__asm__(".symver _Func, _Func@X");

Это должно сопровождаться файлом версии скрипта , например:

1 {
  global:
    _Func;
};

передается gcc -Wl,--version-script=foo.version при связывании.

0 голосов
/ 09 ноября 2009

Лучше всего при работе с именами функций в Windows всегда использовать файл .def. Это будет работать одинаково независимо от компилятора. Обычно вам нужен только раздел EXPORTS:

EXPORTS
  Func1
  Func2
  ...
0 голосов
/ 09 ноября 2009

См. Руководство GCC относительно -fleading-underscore . Однако прочитайте предупреждения о последствиях этого действия; возможно, это не то решение, о котором вы думаете.

...