2012-02-20 2 views
0

헤더에 있지만 소스 파일 (공유 객체/DLL에서 가져온 파일)에 OKAY could not be resolved이 있습니다. 헤더는 다른 프로젝트에 있지만 ppackage가 제대로 해결 되었기 때문에 관련이 있어야한다고 생각하지 않습니다.소스 파일에서 보이지 않는 헤더에 enum을 선언 하시겠습니까?

업데이트, 여기서 소스 :

빌드 출력 빌드 불쌍한 프로젝트.

make all 
Building file: ../src/foor.c 
Invoking: GCC C Compiler 
gcc -I"/home/lk/proj/m5/m5/src/include" -O0 -g3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/foor.d" -MT"src/foor.d" -o "src/foor.o" "../src/foor.c" 
In file included from ../src/foor.c:9:0: 
/home/lk/proj/m5/m5/src/include/m5.h:33:3: warning: #warning ohshit 
../src/foor.c:12:1: warning: missing braces around initializer 
../src/foor.c:12:1: warning: (near initialization for 'fs[1]') 
Finished building: ../src/foor.c 

Building target: libfoor.so 
Invoking: GCC C Linker 
gcc -shared -o "libfoor.so" ./src/foor.o 
Finished building target: libfoor.so 

헤더 :

소스 파일
#include <stdio.h> 

enum { 
    OKAY = 0, 
    ERR, 
    ERRANY, 
    // list shortened 
    ERRNOTFOUND, 
}; 

typedef struct { ..foobars.. } ppackage; 

: 당신이 헤더를 포함하는 경우

#include <header.h> // Did add -I ../include, where the header is 

ppackage knock(ppackage *in) 
{ 
    return OKAY; // ERROR 
} 
+1

하고 나는 많은 프로젝트를 가지고 있기 때문에 매우 이식성이없고 심지어 더러운 것입니다. 그러나 그렇습니다. 이것을 교차 프로젝트 헤더라고합니다. 이상하게도 공유 라이브러리/DLL이 아닌 메인 프로그램은 (OK와 모든 것을 사용할 수 있습니다.) 구조체를 사용할 수있는 여기에 표시된 소스 파일에 반대합니다 .... – Eregrith

+0

그리고 난 것이다 당신의 자신의 헤더 파일 대신 사용법 #include <>''의'의 #include ""'사용하고 유지해야 – imacake

+0

github에 업로드 한 디렉토리 구조에 따라 소스 파일은'include' 디렉토리와 같은 디렉토리에 있기 때문에'-I ..'를 사용하지 말아야합니다. –

답변

2

, 그 헤더에 모든 코드는뿐만 아니라 당신의 C 소스에 붙여 넣을 수 있었다 #include 지시문이있는 지점의 파일.

작동하지 않는다고 이상하게 들립니다.

제 3 자 헤더가 포함되어 있기 때문에해야 할 일은 include에 꺾쇠 괄호 대신 따옴표를 사용하는 것입니다.

정확한 컴파일러 출력을 포함하십시오.

+0

나는 그 정도면 충분하다고 생각한다. = D? – imacake

+1

GCC를 사용하고 있으므로 "-c"대신 "-E -P"를 사용하고 출력을 "foor.i"로 리다이렉트하여 C 프리 프로세서 만 실행 해보십시오. ("-P"옵션은 줄 번호 지시어를 사용합니다.) 이제 간단하게 "gcc -c foor.i"를 컴파일하십시오. 이렇게하면 "foor.i"에 오류가 발생한 행 번호가 표시되고 전처리 된 코드를보고 문제가 무엇인지 확인할 수 있습니다. –

+0

@AlexMeasday "즐겨 찾는 댓글"버튼이없는 이유 ... 감사합니다. – imacake

0

그것은

는 Ppackage는 구조체 {..foobars입니다 형 ppackage의 반환 값을 가져야한다 (ppackage *에서)를 노크 .. 당신의 열거가 ..foobars 관련되어 있는지 확실하지 않습니다 .. }

preturnvalue_t knock(ppackage *in) 
    { 
     return OKAY; // ERROR 
    } 

당신이 무엇을해야합니까 함수와

typedef enum { 
    OKAY = 0, 
    ERR, 
    ERRANY, 
    // list shortened 
    ERRNOTFOUND, 
    } preturnvalue_t; 

합니까?

루츠

당신은 링크를 만드는 '<>'시스템 파일을
관련 문제