Привет всем.
Мне надо использовать асм вставку. А я не особо в этом опытный.
Пишу просто для пробы:
...
void printab(int );//то есть функция объявлена
...
int x1;
asm("pushl %0\n\tcall printab \n\tpop %%eax" : : "r" (x1));
...
Пишет мне
undefined reference to printab
Попытался сделать это подобным образом
asm("pushl %0\n\tcall %1 \n\tpop %%eax" : : "r" (x1),"r"(printab));
Пишет предупреждение
indirect call without '*'
Но работает. Но что значит это предупреждение?
Как от него избавиться?
Объясните пожалуйста, что это значит, и как от этого избавиться.
И как тогда сделать "direct call"?
Спрашивал на других форумах, но пока никто не ответил.
09.08.05 17:44: Перенесено модератором из 'C/C++' — Павел Кузнецов
TnedutS wrote:
> Привет всем. > Мне надо использовать асм вставку. А я не особо в этом опытный. > Пишу просто для пробы: > ... > void printab(int );//то есть функция объявлена > ... > int x1; > asm("pushl %0\n\tcall printab \n\tpop %%eax" : : "r" (x1)); > ... > Пишет мне > undefined reference to printab
C++ mangling.
extern"C"void printab(int );
Если не хочешь extern "C", то nm my_obj.o и посмотри какое mangled имя у printab.
Здравствуйте, Glоbus, Вы писали:
G>Здравствуйте, TnedutS, Вы писали:
TS>>Привет всем. TS>>Мне надо использовать асм вставку. А я не особо в этом опытный.
G>А не пробовал что-нить типа
G>
Здравствуйте, MaximE, Вы писали:
ME>TnedutS wrote:
>> Привет всем. >> Мне надо использовать асм вставку. А я не особо в этом опытный. >> Пишу просто для пробы: >> ... >> void printab(int );//то есть функция объявлена >> ... >> int x1; >> asm("pushl %0\n\tcall printab \n\tpop %%eax" : : "r" (x1)); >> ... >> Пишет мне >> undefined reference to printab
ME>C++ mangling.
ME>
ME>extern"C"void printab(int );
ME>
ME>Если не хочешь extern "C", то nm my_obj.o и посмотри какое mangled имя у printab.
ME>-- ME>Maxim Yegorushkin
Здравствуйте, Glоbus, Вы писали:
G>Здравствуйте, TnedutS, Вы писали:
TS>>Привет всем. TS>>Мне надо использовать асм вставку. А я не особо в этом опытный.
G>А не пробовал что-нить типа
Здравствуйте, MaximE, Вы писали:
ME>TnedutS wrote:
>> Привет всем. >> Мне надо использовать асм вставку. А я не особо в этом опытный. >> Пишу просто для пробы: >> ... >> void printab(int );//то есть функция объявлена >> ... >> int x1; >> asm("pushl %0\n\tcall printab \n\tpop %%eax" : : "r" (x1)); >> ... >> Пишет мне >> undefined reference to printab
ME>C++ mangling.
ME>
ME>extern"C"void printab(int );
ME>
ME>Если не хочешь extern "C", то nm my_obj.o и посмотри какое mangled имя у printab.
ME>-- ME>Maxim Yegorushkin
Здравствуйте, MaximE, Вы писали:
ME>TnedutS wrote:
ME>[]
>> Пишет то же самое. Я уже пробовал.
ME>Я пробовал — у меня все линкуется. Может ты забываешь объектник с ф-цией прилинковать?
ME>-- ME>Maxim Yegorushkin
Я сделал совсем просто сейчас.
Все удалил. Создал файл
Здравствуйте, Lorenzo_LAMAS, Вы писали:
TS>>Может, я правда, что-то не так делаю? TS>>Или это из-за компилятора все же? TS>>версия, какя уже писал 3.3.3 TS>>Операционка winxp.
L_L>Под линуксом и g++ 3.2.3 у меня все пашет. Может у тебя под вин L_L>версия г++ добавляет еще что-нить к имени функции? например _ перед именем?
Точно! Сейчас посмотрел ассмовский файл!!!
Там действительно добавляется подчеркивание!!!
Вот это дела...
Спасибо огромное!
Здравствуйте, Lorenzo_LAMAS, Вы писали:
TS>>Может, я правда, что-то не так делаю? TS>>Или это из-за компилятора все же? TS>>версия, какя уже писал 3.3.3 TS>>Операционка winxp.
L_L>Под линуксом и g++ 3.2.3 у меня все пашет. Может у тебя под вин L_L>версия г++ добавляет еще что-нить к имени функции? например _ перед именем?