汇编代码文件如下:
section .bss section .data section .text global _gettsc _gettsc: rdtsc rol rdx,32 or rdx,rax mov rax,rdx retC/C++代码文件如下:
#include <stdio.h> extern unsigned long _gettsc(); int main() { unsigned long count = _gettsc(); return 0; }如果c++代码文件命名为.cpp则按照C++去编译链接会报错:
nasm -f elf64 -F stabs -Ox standerd.asm -o standerd.asm.o make: Circular standerd.asm <- standerd.asm.o dependency dropped. g++ -lpthread -I./ -masm=intel -O3 main.cxx.o standerd.asm.o -o test main.cxx.o: In function `main': main.cpp:(.text.startup+0x5): undefined reference to `_gettsc()' collect2: error: ld returned 1 exit status make: *** [all] Error 1 makefile:19: recipe for target 'all' failed如果C/C++代码文件改名为.c按照c语言去编译链接则不会报错
请问有什么解决办法吗?
CPP编译时编译器会修改函数名(为了实现重载),你看看是找不到那个函数定义,用着无法找到的名字替换汇编的_gettsc试试谢谢了,就是这个问题,函数声明增加extern"C"解决问题了。c++有函数名修改机制谢谢,就是这个问题,声明函数时增加extern"C"....解决问题了不要用c++只能用C++问题解决了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。