2017-11-29 32 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ファイルに

package mj; 

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

Haxe - Create a C++ Stand-alone executableを比較)を追加しました。後に再実行:

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

haXeの標準ライブラリ(HXCPP)C++ターゲット上の古いで-D static_linkを使用していない限り(例えば、 "zlibの" と "STD" ライブラリなど)の標準的な機能のダイナミックリンクライブラリを使用Haxe 3.4以降、これらは常に静的にリンクされています。

現在のリリースでは、-D static_linkは、Limeライブラリなどのサードパーティ製の「NDLL」ライブラリに影響します。

以前のLinuxシステム(またはCentOSなどの古いglibcを使用する傾向のあるディストリビューション)でのglibcの違いにより、配布用に古いバージョンのLinux(Ubuntu 12.04または14.04など)を個人的に使用します。

したい場合は、静的にlibstdC++ライブラリif="static_link"を有効にして、ここかhaXeのコミュニティforum上で結果を共有するHXCPP toolchain for Linuxを変えて実験してみてください。

関連する問題