3

外部ライブラリglpkを含む C++ アプリケーションを作成し、Matlab API へのバインドを使用してブーストしました。mex を使用して Matlab でコンパイルする Ubuntu では、プログラムは問題なく実行されます。

Windows プラットフォームで同じアプリケーションを使用するために、Mingw64 を使用してクロスコンパイルしたいと考えました。このスレッドに対応して、次のコマンドで実行できます。

x86_64-w64-mingw32-gcc -m64 -shared -I"/usr/local/MATLAB/R2011a/extern/include" -I"/usr/local/include" -I"/usr/include" -DMATLAB_MEX_FILE -o output.mexw64 input.cpp -L"/usr/local/MATLAB/R2011a/bin/glnxa64/" -lmex -lmx -lmat -leng -L"/usr/lib" -lglpk
  • パス/usr/local/includeには、ブースト ライブラリ (ヘッダーのみのライブラリ) のヘッダー ファイルが含まれています。
  • パス/usr/includeには glpk ライブラリのヘッダー ファイルが含まれています
  • パス/usr/libには glpk ライブラリのソース ファイルが含まれています。

しかし、このコマンドを実行すると、次conflicting declarationsのタイプがあるというエラーが表示されます。

/usr/include/sys/types.h:110:19: error: conflicting declaration ‘typedef __ssize_t ssize_t’
/usr/lib/gcc/x86_64-w64-mingw32/4.6/../../../../x86_64-w64-mingw32/include/_mingw.h:394:35: error: ‘ssize_t’ has a previous declaration as ‘typedef long long int ssize_t’

パス/usr/includeがコンパイラに問題を引き起こしているようです。ただし、glpk ヘッダー ファイルを含める必要があります。問題を解決するためのアイデアはありますか?

4

1 に答える 1

0

glpk ヘッダーが /usr/include にある場合、ライブラリを Windows 用にコンパイルしていない可能性があります。ターゲット プラットフォーム用のすべてのライブラリをクロスコンパイルする必要があります (そして、それらを /usr/x86_64-w64-mingw32 にインストールします (インストールの詳細を正しく推測した場合)。

解決できない大きな落とし穴が 1 つあります。Matlab は Linux であり、Windows でリンク可能なライブラリが含まれていないため、とにかく運が悪いのです。

于 2012-05-02T08:28:31.563 に答える