Я компилировал файл C с помощью gcc в Windows и успешно получил файл pyd. К моему удивлению, он показывает «Эту программу нельзя запустить в режиме DOS» в шестнадцатеричном формате. Хотя я все еще могу вызвать функцию из него, программа вскоре вылетела из-за jpeg_read_header () из библиотеки libjpeg.
У меня вопрос: что, черт возьми, привело к сбою моей программы?
Вот мои догадки:
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?