2017-11-29 24 views
3

다른 컴퓨터에서 사용할 수 있도록 Haxe 프로그램의 명령 행 버전을 컴파일하려고합니다. 이 컴퓨터에는 반드시 Haxe가 설치되어 있지 않습니다. 따라서 정적 링크 된 프로그램을 만들어야합니다. 나는 내 프로그램의 같은 버전을 컴파일 시도 :정적 링크 된 Haxe cpp 프로그램 빌드

haxe -main mj.MJ -cpp outCpp -D HXCPP_M64 -D static_link 

결과가 동적으로 연결되어 그러나 :

$ file outCpp/MJ 
MJ: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, ... 

및 결과에 실행 파일이 라이브러리가 설치되지 않은 컴퓨터에서 작동하지 않습니다 :

$ ./MJ 
./MJ: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./MJ) 

"-D static_link"로는 충분하지 않습니다. 그때 MJ/MJ.hx 파일 (Haxe - Create a C++ Stand-alone executable 비교)

package mj; 

#if cpp 
import cpp.link.StaticStd; 
#end 

을 추가했다. 다시 실행 한 후 :

haxe -main mj.MJ -cpp outCpp -D HXCPP_M64 -D static_link 

파일은 여전히 ​​동적으로 링크되어 있습니다. Linux에서 또해야 할 일이 있습니까?

PS :

$ haxe -version 
3.4.2 
+2

Fyi, 철자가 "HaXe"가 아니라 "Haxe"입니다. 그것은 약 5 년 전에 바뀌 었습니다. :) – Gama11

+0

업데이트를위한 ah tks – quant

+1

실제 질문에 대해서는 답변이 없지만'-D static_link'가 정적으로 링크 된 _library_를 생성하므로'mj.MJ'는 아마도 이전 컴파일에서 남은 것입니다. 'libmj.MJ.a'와 같은 것을 불렀고) 전혀 실행 가능하지 않았습니다. – Gama11

답변

2

당신이 나이에 -D static_link을 사용하지 않는 한 (예 : "ZLIB"과 "표준"라이브러리 등) 표준 기능에 대한 C++ 대상 사용 동적 링크 라이브러리에 Haxe 표준 라이브러리 (HXCPP) Haxe 3.4부터는 항상 정적으로 링크되어 있습니다.

-D static_link은 아직 Lime 라이브러리와 같은 타사 "NDLL"라이브러리에 영향을줍니다.

이전 Linux 시스템 (또는 CentOS와 같은 이전 glibc를 사용하는 경향이있는 배포판)의 glibc의 차이로 인해 배포 용으로 빌드하기 위해 이전 버전의 Linux (예 : Ubuntu 12.04 또는 14.04)를 개인적으로 사용합니다.

HXCPP toolchain for Linux을 변경하여 정적 libstdC++ 라이브러리 if="static_link"을 사용하도록 설정하고 여기에서 결과를 공유하거나 Haxe 커뮤니티 forum에서 공유하도록 시도해보십시오.