2016-11-03 2 views
0

(ACE_TAO) 라이브러리에서 .h 및 .cpp 파일을 참조하는 C++ 프로젝트가 있습니다. (http://www.theaceorb.com/)Eclipse C++ 외부 라이브러리 참조 (ACE + TAO)

프로젝트 GCC C++ 컴파일러와 GCC C++ 링커에 대한 라이브러리 경로가 포함되었습니다.

그러나 프로젝트를 빌드 할 때 오류가 계속 발생합니다.

undefined reference to ACE_Message_Block::~ACE_Message_Block() 
    | line 627 external location /home/user/Documents/ACE_wrappers/ace/CDR_Stream.inl 

undefined reference to CORBA::ORB~ORB(); 
    | line 45 external location /home/user/Documents/ACE_wrappers/Tao/tao/ORB.inl 

여기

#ifndef MESSENGERSERVER_H_ 
#define MESSENGERSERVER_H_ 
#include <tao/ORB.h> // this is causing the error 

class MessengerServer { 
public: 
    MessengerServer(); 
    virtual ~MessengerServer(); 
private: 
    CORBA::ORB_var orb; // this is causing the error 

1) 나는 올바른 헤더 파일과 일식을 포함 한 헤더 파일을 확인할 수 있습니다 내 자신의 프로젝트 헤더 파일, 그래서이 내 라이브러리 경로가 정확하다는 것을 의미한다 권리?

2) 내 라이브러리 경로가 올바른 경우 Eclipse가 두 가지 방법의 구현을 위해 .cpp 파일에 연결할 수없는 이유는 무엇입니까? 내 .h 파일과 .cpp 파일은 같은 폴더 디렉터리에 있습니다.

3) 나는 라이브러리 경로에 .o 파일이 없기 때문에 'make'를 실행하고 같은 디렉토리에서 .o 파일을 생성했기 때문에 그럴 수 있다고 생각했지만 여전히 같은 오류가 발생합니다. .

뭔가 누락되었거나 오해가 있습니까? 미리 감사드립니다.

업데이트 : 여기 내 프로젝트에게 연결이 실패

g++ -I/home/user/Documents/ACE_wrappers/TAO/ 
-I/home/user/Documents/ACE_wrappers/ace/ 
-I/home/user/Documents/ACE_wrappers/ 
-O0- g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"myMain.d" -MT"myMain.d" -o"myMain.o" "../myMain.cpp" 
Finished Building:../MyMain.cpp 

g++ -I/home/user/Documents/ACE_wrappers/TAO/ 
-I/home/user/Documents/ACE_wrappers/ace/ 
-I/home/user/Documents/ACE_wrappers/ 
-O0- g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"MyServer.d" -MT"MyServer.d" -o"MyServer.o" "../MyServer.cpp" 
Finished Building:../MyServer.cpp 

g++ -L/home/user/Documents/ACE_wrappers/TAO/ 
-L/home/user/Documents/ACE_wrappers/ace/ 
-L/home/user/Documents/ACE_wrappers/ 
-o "TAOServer" ./myMain.o ./MyServer.o 
./MyMain.o: In function 'ACE_InputCDR:~ACE_InputCDR()': 
/home/user/Documents/ACE_wrappers/ace/CDR_Stream.inl:627: undefined reference to ACE_Message_Block::~ACE_Message_Block() 
./MyServer.o: In function 'CORBA::ORB:decr_refcount()': 
/home/user/Documents/ACE_wrappers/Tao/tao/ORB.inl:45: undefined reference to CORBA::ORB~ORB(); 

답변

0

을 구축하는 데 사용되는 명령 이클립스 C++입니다. 아니요, "include"경로는 헤더 파일을 찾을 수 있는지 여부를 결정합니다. "라이브러리"경로는 오브젝트 파일 또는 라이브러리 파일에 링크하는 데 사용됩니다. 연결이 작동하지 않습니다.

누락 된 기능은 ACE_Message_Block 및 ORB 클래스의 소멸자입니다. 소스 파일을 찾아서 컴파일하고 컴파일 된 오브젝트 파일이 프로젝트의 라이브러리 경로에 있는지 확인하십시오.

+0

/home/user/Documents/ACE_wrappers/ace/및/home/user/Documents/ACE_wrappers/Tao/tao /에서 소스 파일을 컴파일하고 내 라이브러리 경로에이 두 파일을 추가했습니다. ACE_Message_Block 및 ORB에 대해 .o 객체를 볼 수 있습니다. 하지만 여전히 동일한 오류가 발생했습니다 –

+0

또한 명령 줄에서 라이브러리를 지정했는지 확인하십시오. 여기를 참조하십시오 : http://stackoverflow.com/questions/22426574/gcc-undefined-reference-to. 이름과 경로로 라이브러리를 지정하지 않으면 전체 경로 인 라이브러리 자체도 명령 줄에 포함되도록하십시오 (모든 .o 파일). 또한이 문제를 일으키는 두 개의 .inl 파일을 살펴볼 수도 있습니다. 연결 설정이 올바른 경우 네임 스페이스 문제 일 수 있습니다.이 경우 클래스를 검색하는 데 사용되는 네임 스페이스가 올바른 네임 스페이스와 일치하지 않습니다. –

+0

gcc 명령 행을 게시해야 할 수도 있습니다. 하나의 큰 명령 행 또는 여러 개의 컴파일 및/또는 링크 명령 행이있을 수 있습니다. –

관련 문제