0

開発段階にある既存のプロジェクトを利用して、そこから共有ライブラリを構築し、このライブラリをテストに使用する必要があることをオンラインで読みました。私が計画しているのは、現在のすべての作業を新しい共有ライブラリ eclipse プロジェクトに移動し、これを外出先でのテストに使用し、この新しい共有ライブラリ プロジェクトで開発を続け、テストと開発の両方に使用することです。ただし、共有ライブラリ プロジェクトのビルドをヒットすると、そこに行った変更がコンパイルされるかどうかを確認するために、

呼び出し: クロス G++ リンカ g++ -shared -o "libMatchingEngineLibrary.so" ./src/Fill.o ./src/GlobalMatchingEngine.o ./src/Main.o ./src/Order.o ./src/OrderBook.o ./src/SingleFifoMatchingEngine.o ./src/SingleMatchingEngine.o
/usr/bin/ld: ./src/Fill.o: 再配置 R_X86_64_32S は、共有オブジェクトを作成するときに、'vtable for Fill' に対して使用できません。-fPIC で再コンパイルします。/src/Fill.o: シンボルを読み取れませんでした: 不正な値 collect2: ld が 1 の終了ステータスを返しました make: * [libMatchingEngineLibrary.so] エラー 1

この共有ライブラリ プロジェクトをビルドすることさえできないのはなぜですか。ましてや、テストを開始することはできません。私は何を間違っていますか?私はそれを構築することができるはずですか?この種の共有ライブラリ プロジェクトで開発を行っても問題ありませんか (これは、テストと開発を並行して行うための便宜のためだけに行いたいことです)。

編集:エラーに記載されている Fill クラスは、アルファベット順でプロジェクトの最初のクラスです。eclipseでハンマーアイコンを叩いてビルドしています。

4

1 に答える 1

0

そのエラーは、何が欠けているかを正確に示しています。-fPICフラグを付けて再コンパイルします。これにより、「位置に依存しないコード」が可能になります。これは、共有オブジェクト ライブラリを作成する前に理解する必要があります。幸運を!

于 2013-10-28T17:07:26.777 に答える