2017-11-21 10 views
1

FMUSDK을 다운로드했으며 코드를 컴파일하고 싶습니다. 불행히도 빌드 스크립트는 Visual Studio C 컴파일러와 함께 작동하도록되어 있지만 설치/사용할 수는 없습니다. 따라서 GCC로 컴파일 할 수 있도록 스크립트 (및 코드 일부)를 수정하려고합니다. 하지만 복잡한 코드를 컴파일 할 완전히 새로운 오전 (나는 보통 단지 GCC를 사용 * .c 인 -o outfile.exe) 여기 g ++로 외부 라이브러리에 링크

내 문제입니다 :

#pragma comment(lib, "libxml2.lib") 

와 연결 라이브러리가 일부 파일에서 이것은 GCC에서는 작동하지 않습니다.

는 LIB 내가

fmusdk\fmu20\src\co_simulation>..\build_fmusim_cs_gcc.bat 

와 빌드 스크립트를 호출 ..\shared\parser\libxml\

에서 헤더 파일과 ..\shared\parser\libxml2.lib 에서 찾을 수 있습니다

스크립트는 다음과 같습니다

set SRC=main.c ..\shared\sim_support.c ..\shared\xmlVersionParser.c ..\shared\parser\XmlParser.cpp ..\shared\parser\XmlElement.cpp ..\shared\parser\XmlParserCApi.cpp 
set INC=-I ..\shared\include -I ..\shared -I ..\shared\parser\libxml -I ..\shared\parser 
set LIB=-L ..\shared\include -L ..\shared -L ..\shared\parser\libxml -L ..\shared\parser 
set OPTIONS=-D FMI_COSIMULATION -D STANDALONE_XML_PARSER -D LIBXML_STATIC -v 

g++ %INC% %OPTIONS% %SRC% %LIB% -lxml2 -o fmu20sim_cs.exe 

하지만 다음과 같은 오류 메시지가 나타납니다.

c:/users/<username>/userprograms/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lxml2 

나는 http://www.rapidtables.com/code/linux/gcc/gcc-l.htm에서 찾은 것을 사용하려고했지만, 작동하지 않는 것 같습니다.

누군가 도움을 줄 수 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까? INC와 LIB에서는 도움이되는 모든 것을 넣었지만 실제로 내가 무엇을하고 있는지 전혀 알지 못합니다.

또한 배치 파일의 자세한 출력과 함께 로그 파일이 있습니다. 하지만 여기에 업로드하는 방법 :(

안부, 마틴

+0

내가 너무 시스템에 설치 xml2 라이브러리가 있어야합니다 생각합니다. 어쩌면 또 다른 의존성으로, 처음에는 libxml2를 설치하려고 시도 할 것입니다. – nullqube

+0

그러나 도서관은 이미 있습니다. 그 밖의 무엇을해야합니까? – HarryKane

+0

정말입니까? 어떻게 그걸 확인 했니? 나는 당신이 스크립트 (libxml)에서 언급 한 것을 의미하지 않으며, 만약 당신이 풀 패스 -Lpath/to/xml2로 주소를 지정할 수 있다고 확신한다면 – nullqube

답변

2

libxml2.lib은 라이브러리 이름 규칙을 어지럽히는 예입니다. Visual Studio는 .lib 확장자 (이 경우 xml2.lib)를 추가하는 규칙을 사용하며, GCC는 lib 접두사와 라이브러리 이름에 .a 확장자 (이 경우 libxml2.a)를 추가하는 규칙을 사용합니다. 그 파일 이름 GCC는 -lxml2 옵션을 지정한 경우를 찾고 있기 때문에,

  1. 변경 libxml2.a에 라이브러리 파일 이름 :

    는 GCC 설명서 (https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Link-Options.html#Link-Options)에 따르면 두 가지 옵션이 있습니다.

    링커는 라이브러리에 대한 표준 디렉토리 목록을 검색합니다. 실제로는 lib 라이브러리 .a라는 파일입니다.

  2. (예를 들어 g ++ 명령 줄에서 libxml2.lib-lxml2 변경) -l하지 않고, 라이브러리 파일의 전체 이름을 입력 한 후 GCC 정확히 지정된 이름을 찾습니다.

    특수 인식 접미어로 끝나지 않는 파일 이름은 오브젝트 파일 또는 라이브러리의 이름으로 간주됩니다. (오브젝트 파일은 파일 내용에 따라 링커에서 라이브러리와 구별됩니다.) 링크가 완료되면 이러한 오브젝트 파일이 링커에 대한 입력으로 사용됩니다.

2

당신은 -llibxml2에 의해 -lxml2를 교체해야 표시되지 않는

Explaination, Mingw에서 :.

이 또한주의 라이브러리 이름이 "lib<name>.a""lib<name>.lib"은 동일하지 않으며, 비정상적인 "lib<name>.lib" 규칙에 따라 명명 된 라이브러리가있는 경우 라이브러리 이름이 fou가되지 않습니다. "-l<name>" 사양으로 지정 - 라이브러리의 이름을 바꿀 수없는 경우 대신 "-llib<name>" 양식을 사용해야합니다.

+0

-llibxml2 옵션을 사용할 예정이므로 언젠가는 얻을 수 있다면 lib와 VS를 함께 사용할 수 있습니다. – HarryKane