Как я могу избежать манипуляции с именами?

… в c ++

Вы не можете. Он встроен в компиляторы, чтобы вы могли перегружать функции и иметь функции с тем же именем в разных classах и т. Д. Но вы можете писать функции, которые искажены, как функции C. Они могут быть вызваны из C-кода. Но они не могут быть перегружены и не могут быть вызваны «нормальными» указателями на функции C ++:

extern "C" void foo() { } 

Вышеупомянутая функция будет искажена, как функции C для вашего компилятора. Это может не включать никаких изменений в название или некоторые изменения, например, ведущие «_» перед ним или около того.

Другой путь:

Управление именами, используемыми в коде ассемблера ( спецификация gcc ).

Вы можете указать имя, которое будет использоваться в коде ассемблера для функции или переменной C , написав ключевое слово asm (или __asm__ ) после объявления. Вы должны убедиться, что имена ассемблеров, которые вы выбрали, не конфликтуют с любыми другими символами ассемблера или справочными реестрами.

Чтобы указать имя ассемблера для функций, напишите декларацию для функции перед ее определением и поместите там asm , например:

  int func () asm ("MYFUNC"); int func () { 

g++ скомпилирует его, а выход nm -D будет

 0000000000001e02 T MYFUNC 

вместо

 0000000000001e02 T _Z4funcv 

Протестировано по g ++ 4.9.2

Вы имеете в виду, что вы можете экспортировать свою функцию из библиотеки? extern “c” {}