2016-12-02 5 views
3

원격 서버와 통신을 시도하는 haxe 프로그램을 작성했습니다. 나는 C++ 타겟에 성공적으로 컴파일 할 수 있었다. 실행 파일은 시스템에서 정상적으로 실행됩니다. 나는 다른 창 상자에서 동일하게 실행하려고 할 때, 다음과 같은 오류와 함께 실패Haxe - C++ 독립 실행 형 실행 파일 만들기

오류 : 마법처럼 일을 그때 haxe 및 hxcpp을 설치

모듈 표준의 @의 socket_init__0를로드 할 수 없습니다 . exe를 실행할 수있었습니다. 이제는 hxcpp에 대한 의존성이 있음을 이해합니다.

독립 실행 형 응용 프로그램을 만들려는 경우에도 여전히 문제가 해결되지 않았습니다. 몇 가지 연구를 한 후 내 문제를 해결할 수있는 다음 지침에 따라 파일 (ExampleMain.CPP)을 발견했습니다. 그러나, 나는 초심자이고, 따라 가지 않는다. 어떤 사람이 이걸 가지고 나를 걸을 수 있습니까? 감사합니다

ExampleMain.CPP는

이 정적 버전을 연결하는 데 사용할 수있는 예제 주류이다.

CD $ HXCPP/런타임의

haxelib 실행 hxcpp BuildLibs.xml -Dstatic_link

그리고 정적 혼란 스럽다 : 먼저 당신과 함께, 표준 libs와의 정적 버전을 구축해야 ('static_link'전에 여분의 공간 주) : 사용하여 응용 프로그램

haxe - 주요 YourMain -cpp CPP -D static_link

그러면 위의 라이브러리를이 (또는 수정 된 버전) main과 링크해야합니다. VisualStudio 프로젝트를 만들고 $ HXCPP/bin/Windows/(std, regexp, zlib) .lib 및 응용 프로그램 라이브러리의 라이브러리를 추가 할 수 있습니다.

-debug 플래그로 컴파일하면 라이브러리의 이름이 달라집니다.

CL ExampleMain.cpp의 CPP/YourMain.lib $ HXCPP/빈/윈도우/std.lib$ HXCPP을 (user32.lib 만 디버그 버전에 필요) Windows 용 명령 줄에서 연결

/bin/Windows/zlib.lib $ HXCPP/bin/Windows/regexp.lib user32.lib

다른 운영 체제에서는 compile + link 명령이 다릅니다.

g ++ ExampleMain.cpp의 CPP/테스트 - debug.a $ HXCPP/빈/맥/regexp.a$ HXCPP/빈/맥/std.a의 $의 HXCPP/빈/맥 : 여기에 Mac 용 하나입니다 /zlib.a

당신이이 3 (예를 들어, NME) 이외의 다른 정적 라이브러리를 추가 할 경우 당신이 필요가 너무 "-Dstatic_link"플래그 이러한 컴파일, 그들의 "register_prims" 초기화 호출을 호출하는 것입니다 . 여분의 정적 라이브러리를 포함 시키려면 라이브러리 라인에 라이브러리가 필요하며 링크하려면 추가 종속성이 필요할 수 있습니다. 타사 라이브러리의 정적 연결 정적 라이선스에는 라이선스 관련 사항이있을 수 있습니다.

답변

3

잘 모르겠지만 hxcpp가 이미 수행하고있는 것과 동일한 추가 단계를 취하는 것으로 보입니다. 독립형 응용 프로그램을 컴파일하면 실제로 독립형이며 hxcpp 자체에 의존하지 않지만 hxcpp 내의 표준 라이브러리에 종속되어 있습니다. 예를 들어 정규 표현식을 사용하는 경우 hxcpp가 가지고있는 regexp.dll이 필요합니다. haxe 표준 라이브러리는 std.dll에 있고 zlib은 압축 패키지에서 압축을 사용한 경우입니다.

내가 잘못 본게 아니라면, 기본값은 이러한 구성 요소를 동적으로 참조하는 것입니다. 사용자가 제안한대로 응용 프로그램을 독립 실행 형으로 유지하려면이 dll을 바이너리와 함께 복사하기 만하면됩니다.

너는 haxe 부호에서이 도서관 분대에 자동적으로 연결하고 싶은 경우에, cpp.link 포장에서 유형 import 다만 것. 이것은 hxcpp에게 자동으로 라이브러리를 컴파일의 일부로 가져 오도록 지시합니다. 동적으로 대신 바이너리에 정적으로 링크합니다. 추가 단계가 필요하지 않습니다!

짧은 대답 : import cpp.link.StaticStd; 및 다른 라이브러리 구성 요소를 코드의 링크 패키지에 추가하십시오. 가져온 것이면 어디에서나 사용할 수 있으며 링크하면됩니다.

관련 문제