問題タブ [mxe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
310 参照

qt - Windows 用の SIP と PyGlobalShortcut をビルドする

Ubuntu で Python2.7/PyQt4 プログラムを作成していますが、アプリケーションは Windows プラットフォームにデプロイされます。機能の 1 つは、アプリケーションがフォーカス/最小化されていない場合でも、複数のキーストローク (「Alt+A」など) をキャプチャする必要があることです。この目的のために、libxqtの Python/SIP ラッパーであるPyGlobalShortcutを使用します。マニュアルに従って、Qt4 + SIPをインストールし、コマンドを実行するpip install PyGlobalShortcutと、libqxt ライブラリと Python ラッパーが自動的にコンパイルおよびインストールされました。これは問題なく機能しました。

Windows でネイティブにビルドする

しかし、Windows に PyGlobalShortcut をインストールしようとして壁にぶつかりました。パッケージのバイナリ ディストリビューションは廃止されているため、自分でコンパイルする必要があります。Qt4 + MinGW と tweak をインストールする必要$PATHがありましたが、これは問題ではありませんでした。次のステップは SIP を取得することです。これは残念ながら Py2.7 のバイナリ形式では提供されていません。SIP のソース コードを入手しましたが、ビルドできませんでした。

makeを呼び出すと、mingw32-makeすぐMSVCR80.dll見つかりませんでしたというエラーが返されます。ちょっとググったところ、MS Visual Studio のコンポーネントか何かのようですが、MinGW とはどう関係があるのでしょうか。この dll を提供している、または入手方法を説明している公式 Web サイトを見つけることができませんでした。

Linux でのクロスコンパイル

また、 MXEを使用して Linux マシンで PyGlobalShortcut をクロスコンパイルできるのではないかと考えました。私もこれを行うことができませんでした。このSOの回答をガイダンスとして使用しました。MXE を入手し、Qt4 をクロスコンパイルしwineて、動作することを確認しました。次に、SIP for Windows をインクルードしてクロスコンパイルしようとしまし<mxe>/usr/bin<mxe>/usr/i686-w64-mingw32.static/qt/bin。Makefile が次の C++ コンパイラではなく、$PATHネイティブ Linux を呼び出したため、惨めに失敗しました。g++MXE

そこで、コンパイラとリンカーを<mxe>/usr/bin、つまりなど にシンボリック リンクしi686-w64-mingw32.static-g++ましたg++。これは役に立ちましたが、現在g++は Python ライブラリとヘッダーが必要です。-の下でそれらを探します/usr/include/python2.7が、それらは Linux 用にコンパイルされているため、Windows バイナリにリンクすることはできません。

このファイルをコンパイルするには、Windows ビルドの Python が必要<mxe root>ようです。ここで単純なものが欠けていると確信しています。残念ながら、私は Windows 用にコンパイルした経験があまりないので、助けていただければ幸いです。

ショートカットの他のオプション?

Python プログラムを書き直して、他のクロスプラットフォーム ライブラリを使用してグローバル ショートカットをキャッチすることは気にしませんが、PyGlobalShortcut 以外は見つかりませんでした。

0 投票する
1 に答える
430 参照

c++ - クロス コンパイル リンカ エラー

Linux 上の Windows 用の小さな C++ スクリプトをクロスコンパイルしています。

これは Qt で作成され、curl を使用します。qt と curl を mxe ( make qt5and make curl) 経由でコンパイルしました。

次に、次のコマンドを実行します。

  1. $MXE/usr/i686-w64-mingw32.static/qt5/bin/qmake
  2. make

これらのエラーが表示されます:

Linux用にコンパイルすると、エラーはありません。

ここに私の .pro ファイルがあります:

どんな助けでも感謝します。

他に情報が必要な場合は、お気軽にお尋ねください。

編集:

の出力make VERBOSE=1

0 投票する
0 に答える
102 参照

c++ - --enable-64 を指定して Octave MXE nsi-installer をコンパイルする

大規模な配列をサポートするために、Windows 用の Octave nsi-installer を --enable-64 でコンパイルしようとしています。

試行 1: Windows 10 で Linux Mint 仮想マシンを使用する:

./configure を見ると、すべて問題ないように見えます。make を実行すると、かなりの数が完了します。ただし、「[build] default-octave」の数分後にクラッシュします。ログを見ると、liboctave/.libs/liboctave-3.dll をリンクしようとすると、次のように表示されます。

libgnu/.libs/libgnu.a(lock.o): 関数glthread_recursive_lock_init_multithreaded': /home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:289: undefined reference to__imp_pthread_mutexattr_init' /home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock 内。 c:292: __imp_pthread_mutexattr_settype' /home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:298: undefined reference to__imp_pthread_mutex_init' への未定義参照__imp_pthread_mutexattr_destroy' /home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:301: undefined reference to' /home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:295: __imp_pthread_mutexattr_destroy' libgnu/.libs/libgnu.a(strsignal.o): In functioninit への未定義の参照': /home/mike/temp/mxe -octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/strsignal.c:143: __imp_pthread_key_create' libgnu/.libs/libgnu.a(strsignal.o): In functionfree_key_mem への未定義の参照': /home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave /オクターブ-4.1.0+/libgnu/strsignal.c:170:への未定義の参照__imp_pthread_setspecific' libgnu/.libs/libgnu.a(strsignal.o): In functionstrsignal': /home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/strsignal.c:101: getbuffer への未定義の参照__imp_pthread_once' libgnu/.libs/libgnu.a(strsignal.o): In function': /home/mike/temp/ mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/strsignal.c:186: __imp_pthread_setspecific への未定義の参照__imp_pthread_getspecific' /home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/strsignal.c:195: undefined reference to' collect2: エラー: ld が 1 つの終了ステータスを返しました

したがって、問題は、lock.c 内の「__imp_pthread_」関数へのこれらすべての未定義の参照です。

これらの行で lock.c を見ると、コードは次のように表示されます。

だから私の主な質問は、なぜリンクで「__imp_」が関数の前に追加されるのですか?

「nm libpthread.so」を実行すると、次のようなメッセージが表示されます。

pthread_mutexattr_init.o: 0000000000000000 T __pthread_mutexattr_init 0000000000000000 T pthread_mutexattr_init

関数はそこにありますが、「__imp_」が添付されているため、リンクには表示されませんか? 理解できない...

ログは、「-lpthread」ではなく「-pthread」が使用されていることを示しています。これが推奨されていると思います。ログの上部を見ると、次のように表示されます。

pthreads ライブラリのチェック -lpthreads... いいえ

フラグなしで pthreads が機能するかどうかを確認しています...いいえ

pthread が -Kthread で動作するかどうかをチェックしています...いいえ

pthread が -kthread で動作するかどうかをチェックしています...いいえ

pthreads ライブラリのチェック -llthread... no

pthreads が -pthread で動作するかどうかをチェックしています...はい

結合可能な pthread 属性をチェックしています... PTHREAD_CREATE_JOINABLE

pthread にさらに特別なフラグが必要かどうかを確認しています...いいえ

試行 2: CentOS Linux システムの使用:

上記と同様に、./configure は機能しますが、"[build] default-octave" に少し進むとクラッシュします。ログを見ると、次のように書かれています。

そのため、「{r, c, lengths...}」行の解釈方法に問題があるようです...最初の試行ではGCC 4.4.7を使用しましたが、GCC 6.2.0にアップグレードすると同じことが起こりました.

どちらかについて何か考えはありますか?

0 投票する
1 に答える
1095 参照

c++ - Linux からのクロス コンパイル時にサード パーティの dll にリンクするにはどうすればよいですか?

ツールを使用してLinuxからWindows 64ビット用のC++プロジェクトをクロスコンパイルしたいと思いmingw-w64ます(実際にはmingw-w64に基づくMクロス環境を使用していますが、これは質問に関係ないと思います)。私の場合、最後のステップでは、サードパーティがコンパイルしたいくつかの dll にリンクする必要があります。これらの dll のソース コードはありません。ヘッダー ファイルとコンパイルされたバイナリだけです。何を使用してコンパイルされましたか? わかりませんが、おそらくVisual Studioです。

私がやっていることを正確に説明するために、Linux から Matlab mex ファイルをクロスコンパイルし、Matlab ライブラリ libmex.dll、libmx.dll、および libmat.dll にリンクする必要があります。ただし、質問に答えるのに Matlab の知識は必要ないと思います。

dll から .def ファイルに定義を抽出する必要があること、および実際にリンクする何らかの種類の別のリンク ライブラリを作成する必要があることを漠然と認識しています。

これらの手順の両方を試みました。最初に、次のコマンドを使用して各ライブラリの定義ファイルを作成しました。

結果の定義ファイルのスニペットを次に示します。libmx.def

次に、Mingw に提供されている手順に基づいて、インポート ライブラリを作成しようとしまし。ただし、mingw-w64 を使用しているため、コマンドは実際には

ただし、これらのライブラリにリンクされた簡単な例をビルドしようとすると、エラーが発生します。ライブラリのビルドとリンクに使用される実際のコマンドは次のとおりです。

コンパイル ステップは問題なく実行されますが、リンク ステップは次のエラーで失敗します。

このコンパイルの結果が静的にリンクされることを嬉しく思います。

だから私の質問は、Linux から Windows 用にクロスコンパイルするときに、サードパーティの dll にリンクするために正確に何をしなければならないのですか?この場合、リンク手順が失敗するのはなぜですか?

ちなみに、この特定の例は単純な C ファイルの例です。実際には、C++ ファイルもリンクする必要があります。C と C++ のビルド プロセスについて混乱していることに関連する、私のプロセスの明らかな欠陥を遠慮なく指摘してください。

0 投票する
1 に答える
1671 参照

c++ - mingw-w64 を使用すると、float.h が見つからないか、正しく含まれていません

float.h を使用していくつかの FPU サイズを設定するコードをクロスコンパイルしようとしています。

それを必要とする特定のコードは次のとおりです。

ただし、コンパイルするとエラーが発生します

別の人が、同じ問題と思われることをここで詳しく説明しています。(かなり古い) スレッドhereで説明されている非常によく似た問題もあり ます。関連する場合、私は を使用していますが、 M クロス環境mingw-w64を介して

float.hこの場合の問題は正確には何ですか?また、回避策はありますか?

編集: gcc からの詳細な出力

編集:詳細

mingw-w64 float.h次のように完全なディレクトリパスを使用しても、同じ結果が得られます。

コード構造に関する詳細情報を編集

さらに詳しい情報を提供するために、使用している関数の宣言が含まれている C ライブラリ (ヘッダーと C ファイル) を実際にコンパイルしていextern Cます。ヘッダー ファイルからの実際の宣言を以下に示します。

私が使用している実際のライブラリはTriangleです。float.h インクルードは、triangle.c にあり、次のようになります。

定義する場所CPU86またはLINUXコンパイル時に。クロスビルドのために、私は定義してCPU86います。

0 投票する
0 に答える
588 参照

c++ - ライブラリの依存関係を見つける (make/cmake/linker)

MXEと cmakeを使用して、クロスプラットフォームの QT C++ アプリケーション (Linux/Windows) を構築しようとしています。私は非常に一生懸命にグーグル検索しましたが、私のグーグルクエリがどれほど素晴らしいかはわかりません。そのようなクエリ。しかし:

問題: 未定義の参照。

(およびこの種の他の多く)

ソリューション:

次に、CMakeFiles.txt に追加します。

最終問題: その他の未定義の参照。

compressしかし、これがどのライブラリから来ているのかわかりませんhb_font_funcs_set_glyph_v_origin_func。1 つずつググってみましたが、石器時代の慣習のようです。そして、長い目で見れば、クロスコンパイルされたすべてのプロジェクトに対してこれを行いたくありません。

質問):

qtビルドファイルを読まずに、必要なライブラリの名前を見つけるにはどうすればよいですか? cmake または make を使用して依存関係 (動的ライブラリが必要) を出力する方法はありますか?

可能な解決策:

  • バイナリ ファイルでlddを使用できることはわかっています。私が必要としているのは、リンク時 ldd のようなものです。これは可能ですか?

  • QT の依存関係を出力するために (QT の構築段階で) make を使用できるかもしれません。もしそうなら、それを行う方法は?

UPD: 発見

  • mxe 関連のほとんどのソリューション:

    usr/bin/i686-w64-mingw32.static-pkg-config --list-all | sort

    usr/bin/i686-w64-mingw32.static-pkg-config Qt5Widgets --libs