我在Windows上使用gcc编译了一个C文件并成功获得了pyd文件。令我惊讶的是,它以十六进制显示“此程序无法在DOS模式下运行”。虽然我仍然可以从中调用该函数,但该程序很快崩溃,由libjpeg库中的jpeg_read_header()引起。
我的问题是我的程序崩溃了什么。
以下是我的猜测:
jpeg_read_header():我尝试了jpeg_mem_src()和jpeg_stdio_src(),但它仍然崩溃了。
int _read_dct_coefficients(FILE* input_file, int** all_dcts)
{
JDIMENSION i, compnum, rownum, blocknum;
JBLOCKARRAY row_ptrs[MAX_COMPONENTS];
size_t block_row_size;
int num_blocks = 0, cnt = 0;
#ifdef LOG_DEBUG
log_debug(__LINE__, "enter _read_dct_coefficients");
#endif
/* init decompression */
srcinfo.err = jpeg_std_error(&jsrcerr);
jpeg_create_decompress(&srcinfo);
/* init compression */
dstinfo.err = jpeg_std_error(&jdsterr);
jpeg_create_compress(&dstinfo);
jsrcerr.trace_level = jdsterr.trace_level;
srcinfo.mem->max_memory_to_use = dstinfo.mem->max_memory_to_use;
#ifdef LOG_DEBUG
log_debug(__LINE__, "%%%%%%%MY TEST # 1%%%%%%%%");
#endif
//***************************************************************
unsigned int get_file_size(FILE *fp)
{
unsigned long filesize = -1;
if(fp == NULL)
return filesize;
fseek(fp, 0L, SEEK_END);
filesize = ftell(fp);
fclose(fp);
return filesize;
}
int size = get_file_size(input_file);
#ifdef LOG_DEBUG
log_debug(__LINE__, "file size = %d", size);
#endif
char *tmp_buf = (unsigned char *)malloc(sizeof(char) * size);
if (size != fread(tmp_buf, 1, size, input_file))
log_debug(__LINE__, "cannot open.");
jpeg_mem_src(&srcinfo, tmp_buf, size);
/*
jpeg_stdio_src(&srcinfo, input_file);
*/
#ifdef LOG_DEBUG
log_debug(__LINE__, "%%%%%%%MY TEST # 2%%%%%%%%");
#endif
jpeg_read_header(&srcinfo, TRUE);
......
}
Pyd文件:无法在DOS模式下运行?
答案 0 :(得分:-2)
Python .pyd
文件只是一个DLL,它只是一个Windows PE文件。按照惯例,Windows PE文件以存根开头,如果在DOS中运行它,则打印该消息:
https://en.wikipedia.org/wiki/Portable_Executable#History
几乎每个Windows EXE和DLL文件都包含此标头;它并不意味着什么特别的。