Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Почему меняются имена функций в библиотеке? |
Автор: mantissa 20.5.2008, 16:40 |
Привет великий All! поскажите плиз, может кто сталкивался... код на С++ с использованием потоков, векторов и строк компилю в lib*****.a g++ -fPIC -c ./../*.cpp -I$(Ph_PlatHdr) g++ -shared -o $(NmLibSoMT102) *.o -lstdc++ или компилю и линкую в lib*****.so g++ -c ./../*.cpp -I$(Ph_PlatHdr) ar -r $(NmLibMT102) *.o моя функция int TreatMes_R(void *p1, void *p2) {...} прекрасно компилиться, но превращается в ... 00000000001070c0 D pArField_MT102_01 00000000001070e0 D pArField_MT102_02 0000000000107100 D pArField_MT102_03 0000000000107120 D pArField_MT102_1N U printf@@GLIBC_2.2.5 U qListSubFun U stdout@@GLIBC_2.2.5 U strlen@@GLIBC_2.2.5 U strncmp@@GLIBC_2.2.5 U strstr@@GLIBC_2.2.5 0000000000005922 t __tcf_0 000000000000593c t __tcf_1 U _Unwind_Resume@@GCC_3.0 00000000001080a0 B vData 0000000000003ea0 T _Z10TreatMes_RPvS_ <<<-------- вот во что она превратилась! 0000000000004fb6 T _Z13CompareFieldsPcPvRS_Ri 0000000000005338 T _Z14TreatMT102F72APc 00000000000049e4 T _Z18After_Block4_MT102PvP11MT102_All_q 0000000000005870 t _Z41__static_initialization_and_destruction_0ii 00000000000055b8 T _Z6SeeMemPvm 00000000000052c8 T _Z9ClearDataP11DescField_t 000000000000675e W _ZdlPvS_ 0000000000005e52 W _ZN9CData2SQLaSERKS_ ... компиляция проекта не идет... линковщик не м. найти TreatMes_R но если в проекте подменить имя на '_Z10TreatMes_RPvS_ ' то все прекрасно работает.. но это ведь называется сделать через ж@#у?? пока близиться 1-е тестирование брошу так ![]() а то мои последователи на меня матом потом ругаться будут... пытаясь разобраться в этой чертовщине... с ув. BSD Добавлено через 2 минуты и 7 секунд кстати... если код просто Си-шный никаких проблем и подмен имен не происходит |
Автор: MAKCim 20.5.2008, 17:14 | ||
компилятор С++ преобразует имена согласно сигнатуре и возвращаемому значению по определенному алгоритму (для обеспечения возможности перегрузки функций и т. д) если хочешь использовать некоторые функции библиотеки, написанной на С++, в проекте на С, пометь их через extern "C"
|