4

C++ プログラムで 32 ビットと 64 ビットの両方の .so ファイルを同時にリンクしようとしています。私は64ビットのUbuntu 12.04.1を使用していますが、再コンパイルするソースファイルもありません。

g++ コマンドを実行すると:

g++ onlineTraining.cpp -I /usr/local/MATLAB/R2012a_Student/extern/include/ -L /home/forest/SoarSuite/out/ -L /usr/local/MATLAB/R2012a_Student/bin/glnx86/ -I /home/フォレスト/SoarSuite/out/include -leng -lmat -lmex -lut -lSoar

32 ビットの .so ファイルを認識しないため、次の出力が得られます。

/usr/bin/ld: -leng の検索時に互換性のない /usr/local/MATLAB/R2012a_Student/bin/glnx86//libeng.so をスキップします
/usr/bin/ld: -leng が見つかりません
/usr/bin/ld: -lmat の検索時に、互換性のない /usr/local/MATLAB/R2012a_Student/bin/glnx86//libmat.so をスキップします
/usr/bin/ld: -lmat が見つかりません
/usr/bin/ld: -lmex の検索時に、互換性のない /usr/local/MATLAB/R2012a_Student/bin/glnx86//libmex.so をスキップします
/usr/bin/ld: -lmex が見つかりません
/usr/bin/ld: -lut の検索時に、互換性のない /usr/local/MATLAB/R2012a_Student/bin/glnx86//libut.so をスキップします
/usr/bin/ld: -lut が見つかりません
collect2: ld が 1 つの終了ステータスを返しました

-m32 を指定して g++ コマンドを実行すると:

g++ -m32 onlineTraining.cpp -I /usr/local/MATLAB/R2012a_Student/extern/include/ -L /home/forest/SoarSuite/out/ -L /usr/local/MATLAB/R2012a_Student/bin/glnx86/ -I / home/forest/SoarSuite/out/include -leng -lmat -lmex -lut -lSoar

64 ビットの .so ファイルを認識しないため、次の出力が得られます。

/usr/bin/ld: -lSoar の検索時に互換性のない /home/forest/SoarSuite/out//libSoar.so をスキップします
/usr/bin/ld: -lSoar が見つかりません
/usr/bin/ld: -lstdc++ の検索時に、互換性のない /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so をスキップします
/usr/bin/ld: -lstdc++ の検索時に、互換性のない /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a をスキップします
/usr/bin/ld: -lstdc++ が見つかりません
collect2: ld が 1 つの終了ステータスを返しました

34 ビットと 64 ビットの両方の .so ファイルを同時にリンクすることはできますか? ありがとうございました。

4

2 に答える 2

2

いいえ、これは不可能です。32 ビット ライブラリは 32​​ ビット実行可能ファイルにのみリンクでき、64 ビット ライブラリは 64 ビット実行可能ファイルにのみリンクできます。

リンクしようとしている Matlab ライブラリが 32 ビットとしてしか利用できない場合は、アプリケーションも ( を使用して-m32) 32 ビットとしてビルドし、32 ビット ライブラリのみでリンクする必要があります。

于 2013-01-11T03:32:49.883 に答える
-1

2 つのコンパイラ コマンドを実行するシェル スクリプトまたは make ファイルを作成することをお勧めします。

于 2013-01-11T03:16:39.027 に答える