현재 컴퓨터 엔지니어링 시니어 프로젝트의 최종 개발 및 테스트 단계에 있습니다. libs (Libjpeg, Libbmp, PocketSphinx, Libavcodec, Libavcodec, Libavformat, Libavutil)로 코드 (C, Bash)를 디자인하고 개발 한 후 netbeans를 IDE로 사용합니다. 내가 가진 문제는 Netbeans에서 코드가 컴파일되고 링크가 완벽하게 이루어 지므로 소프트웨어의 실행도 문제가되지 않는다는 것입니다. 그러나, 나는 외부 메이크 파일을 사용하여 컴파일하고 코드를 연결할 때, 같은 기능 : fopen
, fread
, fwrite
, fgets
, fscanf
, 등등 ... 작동이 중지C 함수 (fgets, scanf, fread, fwrite, fopen)로 알 수없는 동작
GCC-플래그 :
-m32 -O3 -W -Wall -std=gnu99 -pedantic -Wbad-function-cast -Wcast-align -Wcast-qual \
-Wchar-subscripts -Winline -Wmissing-prototypes -Wnested-externs -Wpointer-arith \
-Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -Wformat-nonliteral \
-Wformat-security -ftrapv -lrt -Wno-unused \
-DMODELDIR=\"`pkg-config --variable=modeldir pocketsphinx`\" \
`pkg-config --cflags --libs pocketsphinx sphinxbase` \
`pkg-config --cflags --libs sndfile`
LD-플래그 :
-I/usr/local/lib -I/usr/local/include -I/usr/local/lib/pkgconfig -lpthread \
-lpocketsphinx -lsndfile -ljpeg -lavformat -lavcodec -ldl -lasound -lz -lswscale \
-lavutil -lm
같은 알 수없는 행동도 perfor에 영향을 미치는 이제 HMM을 열 수없는 PocketSphinx의 무언가.
내 마지막 발표가 다음 주이므로 어떤 계발이라도 정말 기뻐합니다.
---------- UPDATE ----------
이 내 실제 MakeFile을
.SUFFIXES: .o .c
.c.o: $(CC) -c $(CFLAGS) $<
# Compiler and Flags
CC = gcc
CFLAGS = -m32 -O3 -W -Wall -std=gnu99 -pedantic -Wbad-function-cast -Wcast-align -Wcast-qual -Wchar-subscripts -Winline -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -Wformat-nonliteral -Wformat-security -ftrapv -Wno-unused -DMODELDIR=\"`pkg-config --variable=modeldir pocketsphinx`\"`pkg-config --cflags --libs pocketsphinx sphinxbase` `pkg-config --cflags --libs sndfile`
# Libraries
LIBS = -I/usr/local/lib -I/usr/local/include -I/usr/local/lib/pkgconfig -lpocketsphinx -lsndfile -ljpeg -lavformat -lavcodec -ldl -lasound -lz -lswscale -lavutil -lm
# Source files
SRC= libbmp.c state.c secure.c audio.c config.c engine.c helpers.c macmp2.c queue.c image.c video.c
# Object Files
OBJ= libbmp.o state.o secure.o audio.o config.o engine.o helpers.o macmp2.o queue.o image.o video.o
# Executable file
EXECUTABLE = macmp2
# Explicit rule
hist: $(OBJ)
$(CC) $(CFLAGS) -o $(EXECUTABLE) $(OBJ) $(LIBS)
clean:
rm -f *.o
rm -f $(EXECUTABLE)
# Implicit rules
audio.o: macmp2.h libbmp.h audio.c
config.o: macmp2.h libbmp.h config.c
engine.o: macmp2.h libbmp.h engine.c
helpers.o: macmp2.h libbmp.h helpers.c
image.o: macmp2.h libbmp.h image.c
libbmp.o: libbmp.h libbmp.c
macmp2.o: macmp2.h libbmp.h macmp2.c
queue.o: macmp2.h libbmp.h queue.c
secure.o: macmp2.h libbmp.h secure.c
state.o: macmp2.h libbmp.h state.c
video.o: macmp2.h libbmp.h video.c
컴파일 타임 오류입니다 : 없음 런타임 오류 : 없음
먼저 코드의이 부분에서 문제를 확인합니다.
void load_configuration (macmp2_state * s)
{
register uint32_t it = 0x0; /* Iterator */
register uint32_t size = get_file_size (s); /* Configuration File Size */
char * new_entry = (char *) malloc_safe (sizeof (char) * LINE_LENGTH * 5, s);
char * error_msg = (char *) malloc_safe (sizeof (char) * LINE_LENGTH * 5, s);
char * filename = NULL; /* Filename Token */
char * pmode = NULL; /* Processing Mode Token */
char * token = NULL; /* String Token */
FILE * fp = NULL; /* File Pointer */
/* Temporary Variables */
video_file * v = (video_file *) malloc_safe (sizeof(*v), s);
image_file * i = (image_file *) malloc_safe (sizeof(*i), s);
audio_file * a = (audio_file *) malloc_safe (sizeof(*a), s);
#ifdef DEBUG
fprintf (stderr, "Reading configuration file.\n");
#endif
fp = fopen_safe (s->config_file, "r", s);
for (it = size; it > 0x0; it--)
{
/* Initializing Variables */
memset (new_entry, '\0', LINE_LENGTH * 5);
init_video_file (v);
init_image_file (i);
init_audio_file (a);
/* Extracting entry from configuration file */
if (fgets (new_entry, (LINE_LENGTH * 5 * sizeof(char)), fp) == NULL)
{
fatal_error (s, "Error reading configuration file.");
}
MakeFile로 컴파일 할 때 항상 "오류 읽기 구성 파일"이 표시되지만 Netbeans에서는 표시되지 않습니다.
프로그램 입력 : ./macmp2 -c configuration.txt 출력 : 구성 파일을 읽는 중입니다.
[*] 치명적인 오류 : 구성 파일을 읽는 동안 오류가 발생했습니다.
내가 말했듯이, 코드는 내 수석 프로젝트를위한 것이며 여기에 게시 할 수 없습니다. 나는이 문제가 Linker Flags와 관련이 있다고 확신한다. 프로그램은 첫 번째 반복에서 멈 춥니 다. 앞에서 Netbeans와 함께 컴파일 할 때 코드가 작동하지만 게시 된 MakeFile을 사용하여 컴파일 할 때 작동을 멈 춥니 다. 조나단 Leffler의 요청에 따라
---------- UPDATE ----------
, 여기 fopen_safe 및 malloc_safe에 대한 래퍼입니다.
둘 모두에 의해 구현되는 fopen_safe 및 malloc_safe 코드.
void * malloc_safe (size_t size, macmp2_state * s)
{
void * ptr = malloc (size);
if (ptr == NULL)
{
fatal_error (s, "Memory could not be allocated.");
}
return ptr;
}
FILE * fopen_safe (const char * filename, const char * mode, macmp2_state * s)
{
FILE * stream = fopen (filename, mode);
if (stream == NULL)
{
fatal_error (s, "Stream could not be open.");
}
return stream;
}
"작동하지 않음"? –
일주일 정도면 충분하지 않을 수 있습니다. Make 아래의 건물이 프로젝트의 목표라면, 처음부터 다시 작성해야합니다. – Beta
"작업 중지"는 우리가 도와 줄 수있는 것이 아닙니다. 컴파일 타임에 오류가 있으면 게시하십시오. 런타임 크래시가 발생하면 설명하십시오. 출력이 예상 한 것과 다르면 입력을 자세히 설명하십시오. 몇 가지 코드를 게시하십시오. – abelenky