다른 링크 옵션을 시도하는 데 2 일을 소비했지만 아무런 결과가 없으면 거의 모든 "정의되지 않은 참조"항목을 읽었습니다. 나는 필사적이다!이클립스 : C++ lib의 C++ lib에서 참조하는 C 코드는 정의되지 않은 참조가됩니다.
저는 Linux Red Hat 플랫폼에서 Eclipse 3.6.1 및 GCC 4.4.7을 사용하고 있습니다.
솔라리스 스튜디오 (작동하는 곳)에서 Eclipse로 큰 프로젝트를 이식하고 있습니다. transformations.c + .h 파일 - 순수 C 코드가 포함 된 C++ 정적 라이브러리 프로젝트 (예 : Common_Lib)가 있습니다.
이 transformations.h 파일이
#ifndef TRANSFORMATIONS_H_
#define TRANSFORMATIONS_H_
#ifdef __cplusplus
extern "C" {
#endif
void foo(int *x);
#ifdef __cplusplus
}
#endif
#endif
/* transformations.c */
#include "transformations.h"
void foo(int *x)
{
/* calculations on x*/
}
에 싸여 나는 transformations.h에서() foo는 호출 방법 Do_Transform()와 다른 C++ 정적 lib 디렉토리 프로젝트 (예를 들어 Factory_Lib)가 있습니다. 이 프로젝트는 제대로 구축되었습니다.
#ifndef FACTORY_H
#define FACTORY_H
#include "transformations.h"
class CFactory
{
public:
void Do_Transform(int *x);
};
// factory.cpp
#include "factory.h"
void CFactory::Do_Transform(int *x)
{
foo(x);
}
그리고 마지막 하나 - 실행 - foo를 호출 Factory_Lib의 Do_Transform(),()에 대한 호출 C++ 프로젝트 (예를 들어 노동자).
#include factory.h
int main
{
CFactory fact = new CFactory();
int x=0;
fact.Do_Transform(&x);
return 0;
}
근무 (연결) 건설 될 거부 "foo는에 정의되지 않은 참조()"가 나타납니다. foo는()에 대한 호출이 노동자의) (주에서 직접을 수행하는 경우
문제 는이 표시되지 않습니다!
는 노동자 프로젝트에서 나는 등 추가 라이브러리없이 링커 에서 -l참조 된 프로젝트로, 설정 -> 링커 참조에, 참조 프로젝트에 Common_Lib을 참조하려고했습니다 나는 많은 조합을 시도했지만 성공하지 못했습니다.
작동하게하려면 어떻게해야합니까?!?!? 나는 아이디어가 부족하다.
미리 감사드립니다.
맨 마지막에 transformations.h 파일에 #endif가 있습니까? – Pavenhimself
물론 그렇습니다. – rainbringer