2010-08-18 6 views
2

CMake 및 Visual C++를 사용하여 HyDE 라이브러리를 작성했습니다. 그런 다음 여전히 VC++에서 코드를 성공적으로 생성하고 HyDE.lib 및 HyDE 헤더 파일에 링크되는 실행 파일을 빌드 할 수있었습니다.g ++ 연결 문제 : 정의되지 않은 함수 참조

나는 회사에서 다른 사람들과 일하기 위해서 이클립스 CDT로 개발하는 것이 바람직하다는 것을 발견했다. 이클립스 CDT에 대해 거의 알지 못한다면 기본 hello world 프로젝트를 만들고 코드를 삭제 한 다음 모든 코드를 src 폴더에 버렸다. 그런 다음 VC++에서 작동했던 것을 미러링하도록 include 및 lib 경로와 libs를 변경하려고 시도했습니다. 이 시점에서 모든 컴파일 것 같다,하지만 난 링크에 오류가 발생합니다 :

/cygdrive/c/EclipseWorkspace/425HyDE/Debug/../src/FS5HyDE.cpp:16을 : HyDEAPI`정의되지 않은 참조 : : HYDE :: 하이드 (HyDESystemModel :: SystemModel *, 부울) '

(이 같은 많은 오류가 모든 하이드 방법을 참조가 있습니다.) 다음은 명령 줄에서 실행되고있는 것입니다 :

g ++ -L "C : \ Progra ~ 1 \ boost \ boost_1_42 \ lib"-L "C : \ EclipseWorkspace \ HyDE"-o "425HyDE.exe"./src/Adapter_FS5HyDE.o./src/EPSC 예를 들어, .o ./src/PowerSystem.o ./src/Program.o ./src/SSPCComponent.o ./src/Telemetry.o ./src/TelemetryReport.o -l : libboost_thread-vc90-mt-gd-1_42. lib -lHYDE

다른 순서 (두 개만 있습니다.) 때문에 라이브러리 주문 문제가 아닙니다. VC++ (Windows 컴파일러 사용)에서 HyDE.lib을 컴파일하고 g ++로 내 프로그램을 컴파일하는 데 문제가있을 수 있습니까? Eclipse CDT가 makefile을 자동 생성하는 방식에 문제가있을 수 있습니까? 다른 아이디어?

(참고 :.이 SO 비슷한 문제를 가진 다른 사람들의 질문에 충분한 것으로 보이지만, 그들을 통해 읽은 후 나는 내 문제를 해결 하나를 찾을 아직)

답변

1

솔루션 : HyDE 라이브러리가 Visual Studios 컴파일러로 컴파일되었고 Cygwin 툴 체인으로 링크 된 코드를 빌드하려고 시도 했으므로 두 컴파일러는 서로 다른 이름을 가진 mangling schemes를 사용하므로 후자의 링커는 찾을 수 없습니다 HyDE 라이브러리의 예상 심볼. 내가 찾은 유일한 해결책은 Cygwin 툴체인 Hyde 라이브러리 또는으로 Visual Studio가 사용하는 모든 컴파일러로 새 코드를 컴파일하는 것입니다. 위의 글에서

1

클래식 누락 된 기호 오류입니다. 다음 소스 파일 정의 :

HyDEAPI::HyDE::HyDE(HyDESystemModel::SystemModel*, bool)'?

이 파일이 편집에 추가 되었습니까? 붙여 넣은 명령 줄에서 찾을 수 있습니까?

이 기호가 외부 라이브러리에 속하는 경우, -L과 함께 디렉토리 경로를 추가 한 후 -l을 사용하여 프로그램과 링크하려는 특정 라이브러리의 이름을 추가 할 수 있습니다.

-L"C:\path_to_hyde_library" -l:HyDE.lib 

을하고 무슨 일이 있었는지 말해 : 나는 당신과 같이 HyDE.lib에 대한 디렉토리 경로, 라이브러리 이름 바로 뒤에 컴파일 명령에 추가 할 것을 제안거야

. 다른 오브젝트 파일 (* .o 인 파일)필요 그들, 그것은 가장 object files이 매개 변수 목록에 가능한 한 마지막 출연해야 필요가 있다는 것을 의미하는 경우

+0

-L "C : \ EclipseWorkspace \ HyDE"와 -lHDE가 있어야합니다. 나는 또한 -l : HyDE.lib를 시도했다. 같은 결과. – JnBrymn

+0

일식없이 명령 줄에 연결할 수 있었습니까? 사용하는 명령 줄이 무엇이든 상관없이 링크가 작동합니까? 시도해 볼 수있는 또 하나의 방법은 -l "lib 이름을 포함한 전체 라이브러리 경로" – Gangadhar

+0

@Gandahar 동일한 명령을 사용하여 명령 줄에서 링크 할 수 없습니다. 또한 -l "전체 경로"를 사용하면 작동하지 않습니다. -l "full cygwin path"를 사용하면 작동하지 않습니다. – JnBrymn

0

./src/FS5HyDE.o./src/HyDEObservation.o 최신 매개 변수를해야한다.

+0

죄송합니다. 작동하지 않았습니다. – JnBrymn