0

1 つの実行可能プロジェクトでそれを使用して、異なるライブラリをリンクすることに問題があります。

foo()プロジェクト A に;という名前の関数が含まれているとします。静的ライブラリとしてコンパイルされます。
プロジェクト B には という名前の関数が含まれておりbar()、A からのヘッダーが含まれており、共有ライブラリとして , , でコンパイルされて-Wl--whole-archive libA.a -Wlます--no-whole-archive flags
libB.so は に移動されました/usr/lib

現在、プロジェクト C にはB.h、 呼び出しが含まれていますが、プロジェクト A で定義された関数bar()への参照が未定義であるため、コンパイルされませんでした。foo()

nmlibB.so言います:

U foo

私は gcc を使用しています。プログラミング言語は C、IDE は Eclipse CDT です。

この問題を解決するためのアイデアやヒントを持っている人はいますか?

ありがとうございました。

4

1 に答える 1

0

Icarus3 の貢献に感謝し、問題は制限されています。

ProjectA の一部の関数は restrict キーワードを使用していたため、-std=gnu99 でコンパイルされました。コードからこのキーワードを削除し、コンパイル コマンドから -std=gnu99 を削除することで、最終的に問題が解決したことがわかりました。

于 2014-07-25T13:59:57.387 に答える