私は実行可能なライブラリと動的にリンクされたライブラリで構成されている埋め込みLinux C++アプリケーションに問題があります。実行可能ファイルは、ライブラリのエントリポイントの1つである関数を呼び出しますが、その関数は正しく動作しません。私はgdbを使って調査し、ライブラリ内の別の関数xyz()を呼び出すはずのライブラリ関数が、実際には実行可能ファイル内で同じ名前の関数xyz()を呼び出していることがわかります。Linuxライブラリは、実行可能ファイルであいまいな名前の関数を呼び出します - これは可能ですか?
私はこれが起こる可能性が非常に驚いているので、私は何か愚かなことをしています。実行可能ファイルを参照せずに、ライブラリ自体にリンクされていませんか?実行可能ファイル内のabc()の代わりに実行ファイルが誤ってライブラリ内のabc()を呼び出した場合、少なくともライブラリにリンクされているため、実行時には少し意味がありますが、リンカがそのデュアル定義?または、ローカル関数の優先順位をつけますか?
私の関数の名前を変更して名前が一致しないようにすることができましたが、何が起こっているのかを理解したいと思います。私はこの分野やgccツールで多くの経験がありません。まず、上記のシナリオで起こっていると思いますか?
実行ファイルとライブラリの両方が別のライブラリを呼び出します。 私が使用しているライブラリのlinkコマンドは、
powerpc-unknown-linux-gnuspe-g ++ - 4.9.3 aaa.o bbb.o [etc] -shared -o libmylibary.so -L ..です。/otherlibpath -Wl、-rpath-link、../otherlibpath -lotherlibname
実行ファイルのリンクコマンドはどうですか? '-rdynamic'を使用していますか? –
@ WumpusQ.Wumbley:-rdynamicは使用しません。これは、-Wl、-rpath-link、../otherlibpath -lotherlibname -Wl、-Bstatic -lxxx -Wl、-Bdynamic -lmylibraryここで、lxxxは静的にリンクされているライブラリで、otherlibは両方ともリンクされている動的ライブラリです私が上記のことに。あなたの質問をありがとう。 – Spalteer