| |
TC中出现Linker Error: Undefined symbol
|
|
作者: siare_yu
01-01 08:00
回复
|
|
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <graphics.h>
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;
/* PCI设备索引。bus/dev/func 共16位,为了方便处理可放在一个WORD中 */
#define PDI_BUS_SHIFT 8
#define PDI_BUS_SIZE 8
#define PDI_BUS_MAX 0xFF
#define PDI_BUS_MASK 0xFF00
#define PDI_DEVICE_SHIFT 3
#define PDI_DEVICE_SIZE 5
#define PDI_DEVICE_MAX 0x1F
#define PDI_DEVICE_MASK 0x00F8
#define PDI_FUNCTION_SHIFT 0
#define PDI_FUNCTION_SIZE 3
#define PDI_FUNCTION_MAX 0x7
#define PDI_FUNCTION_MASK 0x0007
#define MK_PDI(bus,dev,func) (WORD)((bus&PDI_BUS_MAX)<<PDI_BUS_SHIFT | (dev&PDI_DEVICE_MAX)<<PDI_DEVICE_SHIFT | (func&PDI_FUNCTION_MAX) )
/* PCI配置空间寄存器 */
#define PCI_CONFIG_ADDRESS 0xCF8
#define PCI_CONFIG_DATA 0xCFC
/* 填充PCI_CONFIG_ADDRESS */
#define MK_PCICFGADDR(bus,dev,func) (DWORD)(0x80000000L | (DWORD)MK_PDI(bus,dev,func)<<8)
/* 读32位端口 */
DWORD inpd(int portid)
{ DWORD dwRet;
_asm ("mov dx, portid");
_asm ("lea bx, dwRet");
__emit__( 0x66,0x50,
0x66,0xED,
0x66,0x89,0x07,
0x66,0x58);
return dwRet;
}
/* 写32位端口 */
void outpd(int portid, DWORD dwVal)
{ _asm ("mov dx, portid");
_asm ("lea bx, dwVal");
__emit__( 0x66,0x50,
0x66,0x8B,0x07,
0x66,0xEF,
0x66,0x58);
return;
}
int main(void)
{ int bus, dev, func;
int i; DWORD dwAddr;
DWORD dwData;
FILE* hF;
char szFile[0x10];
printf("\n");
printf("Bus#\tDevice#\tFunc#\tVendor\tDevice\tClass\tIRQ\tIntPin\n");
}
}
}
}
}
return 0;}
字数太多省略了程序,能通过Build,
run的时候出现这样的错“Linker Error: Undefined symbol '__asm' in module PCI2.c”,不知道是原因,谢谢。 |
|
| |
回复:TC中出现Linker Error: Undefined symbol
|
|
作者: dianzix
01-01 08:00
回复
|
|
TC 中的嵌入式汇编使用asm,而不是 __asm,
并且不能在TC环境下编译连接,需要用命令行编译器TCC编译。
而且你上面的程序肯定功能不能通过Build, 如果通过的话run就不需要再连接了。你只是通过了主模块的编译,并没有连接, build包括compile和link,Run前将检查是否通过了连接,若没有才会去连接。 |
|
|